+ -
当前位置:首页 → 问答吧 → 为什么sans-serif字体会匹配到宋体?

为什么sans-serif字体会匹配到宋体?

时间:2010-04-28

来源:互联网

我配置firefox的字体默认为serif,无衬线字体为sans-serif

登录linuxsir论坛发现字体是宋体的,我将无衬线字体改为其它字体,论坛的字体就是我指定的字体

效果请看后面的截图

sans-serif为什么会匹配到宋体呢?宋体不是serif字体的么?

下面是我的local.conf

代码:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- /etc/fonts/local.conf file to configure local fonts -->
<!-- author:kemean on 2007/02/23-->

<fontconfig>

 <!--
 Part 1:
 fonts prefer and substitution
 -->
 <!--
 fonts alias settings
 -->
 <match target="pattern">
 <test name="family">
 <string>宋体</string>
 </test>
 <edit name="family" mode="assign">
 <string>SimSun</string>
 </edit>
 </match>
 <match target="pattern">
 <test name="family">
 <string>新宋体</string>
 </test>
 <edit name="family" mode="assign">
 <string>NSimSun</string>
 </edit>
 </match>


 <!--
 Mark common families with their generics so we'll get
 something reasonable
 -->
 <!--
 Sans-serif faces
 -->
 <alias>
 <family>WenQuanYi Bitmap Song</family> 
 <family>Tahoma</family>
 <family>Verdana</family>
 <family>Arial</family>
 <family>Trebuchet MS</family>
 <family>Comic Sans MS</family>
 <family>SimSun</family>
 <family>SimHei</family>
 <family>FangSong_GB2312</family>
 <family>KaiTi_GB2312</family>
 <family>YouYuan</family>
 <family>LiSu</family>
 <family>STSong</family>
 <family>STZhongsong</family>
 <family>STXihei</family>
 <family>STFangsong</family>
 <family>STKaiti</family>
 <family>STXingkai</family>
 <family>STLiti</family>
 <family>STCaiyun</family>
 <family>STHupo</family>
 <family>STXinwei</family>
 <family>FZYaoTi</family>
 <family>FZShuTi</family>
 <family>Arial Unicode MS</family>
 <default><family>sans-serif</family></default>
 </alias>

 <!--
 Serif faces
 -->
 <alias>
 <family>Georgia</family>
 <family>Times New Roman</family>
 <family>SimSun</family> 
 <family>WenQuanYi Bitmap Song</family> 
 <default><family>serif</family></default>
 </alias>
 <!--
 Monospace faces
 -->
 <alias>
 <family>Courier New</family>
 <family>Andale Mono</family>
 <family>NSimSun</family>
 <default><family>monospace</family></default>
 </alias>


 <!--
 Alias well known font names to MS TrueType fonts.
 These substitution TrueType faces for similar Type1
 faces to improve screen appearance.
 -->
 <alias>
 <family>Times</family>
 <prefer>
 <family>Times New Roman</family>
 </prefer>
 <default><family>serif</family></default>
 </alias>
 <alias>
 <family>Helvetica</family>
 <prefer>
 <family>Arial</family>
 </prefer>
 <default><family>sans-serif</family></default>
 </alias>
 <alias>
 <family>Courier</family>
 <prefer>
 <family>Courier New</family>
 </prefer>
 <default><family>monospace</family></default>
 </alias>


 <!--
 Provide required aliases for standard names
 -->
 <alias>
 <family>sans-serif</family>
 <prefer>
 <family>Tahoma</family>
 <family>Verdana</family>
 <family>Arial</family>

 <family>WenQuanYi Bitmap Song</family>

 <family>Valentio</family> 
 <family>Microsoft YaHei</family> 
 <family>微软雅黑</family> 
 <family>Microsoft JhengHei</family> 
 <family>微軟正黑體</family> 

 <family>Trebuchet MS</family>
 <family>Comic Sans MS</family>
 <family>SimSun</family>
 <family>SimHei</family>
 <family>FangSong_GB2312</family>
 <family>KaiTi_GB2312</family>
 <family>YouYuan</family>
 <family>LiSu</family>
 <family>STSong</family>
 <family>STZhongsong</family>
 <family>STXihei</family>
 <family>STFangsong</family>
 <family>STKaiti</family>
 <family>STXingkai</family>
 <family>STLiti</family>
 <family>STCaiyun</family>
 <family>STHupo</family>
 <family>STXinwei</family>
 <family>FZYaoTi</family>
 <family>FZShuTi</family>
 <family>Arial Unicode MS</family>
 </prefer>
 </alias>
 <alias>
 <family>serif</family>
 <prefer>
 <family>Tahoma</family> 
 <family>Georgia</family>
 <family>WenQuanYi Bitmap Song</family>
 <family>Valentio</family> 
 <family>Microsoft YaHei</family> 
 <family>微软雅黑</family> 
 <family>Microsoft JhengHei</family> 
 <family>微軟正黑體</family>
 <family>SimSun</family> 

 <family>Times New Roman</family>
 </prefer>
 </alias>
 <alias>
 <family>monospace</family>
 <prefer>
 <family>Dejavu Sans Mono</family>
 <family>Courier New</family>
 <family>Andale Mono</family>
 <family>NSimSun</family>
 </prefer>
 </alias>


 <!--
 SimSun english portion substitutionsubstitution 
 -->
 <match target="pattern">
 <test name="family" >
 <string>SimSun</string>
 </test>
 <edit name="family" mode="prepend" binding="strong">
 <string>Tahoma</string>
 </edit>
 </match>


 <!--
 NSimSun english portion substitutionsubstitution 
 -->
 <match target="pattern">
 <test name="family" >
 <string>NSimSun</string>
 </test>
 <edit name="family" mode="prepend" binding="strong">
 <string>Courier New</string>
 </edit>
 </match>


 <!--
 Courier substitution
 -->
 <match target="pattern">
 <test name="family" >
 <string>Courier</string>
 </test>
 <edit name="family" mode="prepend" binding="strong">
 <string>Courier New</string>
 </edit>
 </match>


 <!--
 Bold Tahoma/Verdana substitution:
 when its size more than 20px,substitution with Bold Arial
 -->
 <match target="pattern">
 <test name="family" >
 <string>Tahoma</string>
 <string>Verdana</string>
 </test>
 <test name="weight" compare="more_eq">
 <int>180</int>
 </test>
 <test name="pixelsize" compare="more_eq" >
 <double>20</double>
 </test>
 <edit name="family" mode="prepend" binding="strong">
 <string>Arial</string>
 </edit>
 </match>





 <!--
 Part 2:
 global settings and modify
 -->
 <!--
 Target dots per inch, change dpi to 96
 -->
 <match target="pattern" >
 <edit name="dpi" mode="assign" >
 <double>96</double>
 </edit>
 </match>


 <!--
 Enable sub-pixel rendering.
 If you are using CRT, set rgb -> none
 -->
 <match target="font">
 <edit name="rgba" mode="assign">
 <const>rgb</const>
 </edit>
 </match>


 <!--
 Font size settings:
 set the apposite font size,so it's easy to be read
 -->
 <match target="pattern" >
 <test name="pixelsize" compare="more_eq" >
 <double>8</double>
 </test>
 <test name="pixelsize" compare="less_eq" >
 <double>12</double>
 </test>
 <edit name="pixelsize" mode="assign" >
 <double>12</double>
 </edit>
 </match>


 <!--
 Artificial oblique for fonts without an italic or oblique version
 -->
 <match target="font">
 <!-- check to see if the font is roman -->
 <test name="slant">
 <const>roman</const>
 </test>
 <!-- check to see if the pattern requested non-roman -->
 <test target="pattern" name="slant" compare="not_eq">
 <const>roman</const>
 </test>
 <!-- multiply the matrix to slant the font -->
 <edit name="matrix" mode="assign">
 <times>
 <name>matrix</name>
 <matrix>
 <double>1</double><double>0.2</double>
 <double>0</double><double>1</double>
 </matrix>
 </times>
 </edit>
 <!-- pretend the font is oblique now -->
 <edit name="slant" mode="assign">
 <const>oblique</const>
 </edit>
 </match>


 <!--
 Synthetic emboldening for fonts that do not have bold face available
 -->
 <match target="font">
 <!-- check to see if the font is just regular -->
 <test name="weight" compare="less_eq">
 <int>100</int>
 </test>
 <!-- check to see if the pattern requests bold -->
 <test target="pattern" name="weight" compare="more_eq">
 <int>180</int>
 </test>
 <!-- set the embolden flag -->
 <edit name="embolden" mode="assign">
 <bool>true</bool>
 </edit>
 </match>


 <!--
 Default Fonts setting
 here autohint = ture / hinting = false is for free fonts in your system
 we will use autohint = false / hinting = true for MS core fonts
 -->
 <match target="font" >
 <edit name="antialias" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="autohint" mode="assign" >
 <bool>false</bool>
 </edit>
 <edit name="hinting" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="hintstyle" mode="assign" >
 <const>hintslight</const>
 </edit>
 </match>


 <!--
 The dual-width Asian fonts (spacing=dual) are not rendered correctly,
 apparently FreeType forces all widths to match. Trying to disable the
 width forcing code by setting globaladvance=false alone doesn't help.
 As a brute force workaround, also set spacing=proportional, i.e. handle
 them as proportional fonts:
 -->
 <match target="font">
 <test name="lang" compare="contains" >
 <string>zh</string>
 <string>ja</string>
 <string>ko</string>
 </test>
 <test compare="eq" name="spacing" ><const>dual</const></test>
 <edit name="spacing" mode="assign" >
 <const>proportional</const>
 </edit>
 <edit name="globaladvance" mode="assign" >
 <bool>false</bool>
 </edit>
 </match>


 <!--
 CJK antialias settings:
 when font size (in pixel) between 8 and 20px
 -->
 <match target="font" >
 <test name="lang" compare="contains" >
 <string>zh</string>
 <string>ja</string>
 <string>ko</string>
 </test>
 <test name="pixelsize" compare="more_eq" >
 <double>8</double>
 </test>
 <test name="pixelsize" compare="less_eq" >
 <double>20</double>
 </test>
 <edit name="antialias" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="autohint" mode="assign" >
 <bool>false</bool>
 </edit>
 <edit name="hinting" mode="assign" >
 <bool>false</bool>
 </edit>
 </match>


 <!--
 CJK antialias settings:
 when font size (in pixel) more than 20px, enable AA.
 -->
 <match target="font" >
 <test name="lang" compare="contains" >
 <string>zh</string>
 <string>ja</string>
 <string>ko</string>
 </test>
 <test name="pixelsize" compare="more_eq" >
 <double>20</double>
 </test>
 <edit name="antialias" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="autohint" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="hinting" mode="assign" >
 <bool>true</bool>
 </edit>
 </match>


 <!--
 Italic CJK fonts,enable AA
 -->
 <match target="font">
 <test name="lang" compare="contains" >
 <string>zh</string>
 <string>ja</string>
 <string>ko</string>
 </test>
 <test name="slant" compare="not_eq">
 <const>roman</const>
 </test>
 <edit name="antialias" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="autohint" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="hinting" mode="assign" >
 <bool>true</bool>
 </edit>
 </match>


 <!--
 Microsoft fonts settings
 -->
 <!--
 default : smoothed and hinted
 -->
 <match target="font" >
 <test name="foundry" >
 <string>monotype</string>
 <string>microsoft</string>
 </test>
 <edit name="antialias" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="autohint" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="hinting" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="hintstyle" mode="assign" >
 <const>hintslight</const>
 </edit>
 </match>


 <!--
 Microsoft YaHei Enable AA
 -->
 <match target="font" >
 <test name="family" compare="eq" >
 <string>Microsoft YaHei</string>
 </test>
 <edit name="antialias" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="autohint" mode="assign" >
 <bool>false</bool>
 </edit>
 <edit name="hinting" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="hintstyle" mode="assign" >
 <const>hintfull</const>
 </edit>
 </match>


 <!--
 Courier New:
 both enable autohint and hinting looks very well.
 -->
 <match target="font" >
 <test name="family" >
 <string>Courier</string>
 <string>Courier New</string>
 </test>
 <edit name="antialias" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="autohint" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="hinting" mode="assign" >
 <bool>true</bool>
 </edit>
 <edit name="hintstyle" mode="assign" >
 <const>hintfull</const>
 </edit>
 </match>


 <!--
 Courier New font size
 -->
 <match target="font" >
 <test name="family" >
 <string>Courier New</string>
 </test>
 <test name="pixelsize" compare="less_eq" >
 <double>14.7</double>
 </test>
 <edit name="pixelsize" mode="assign" >
 <double>14.7</double>
 </edit>
 </match>

 <!--must hinting-->
 <match target="font">
 <test name="family">
 <string>MingLiU</string>
 <string>PMingLiU</string>
 </test>
 <edit name="autohint">
 <bool>false</bool>
 </edit>
 <edit name="hinting">
 <bool>true</bool>
 </edit>
 </match>

 <match target="font">
 <edit name="embeddedbitmap" mode="assign">
 <bool>true</bool>
 </edit>
 </match>

 <match target="pattern">
 <test name="family" qual="any">
 <string>AR PL ShanHeiSun Uni</string>
 <string>AR PL New Sung</string>
 </test>
 <test compare="more_eq" name="pixelsize" >
 <double>12</double>
 </test>
 <test compare="less_eq" name="pixelsize" >
 <double>16</double>
 </test>
 <edit name="family" mode="prepend" binding="strong">
 <string>WenQuanYi Bitmap Song</string>
 </edit>
 </match>
 <!--
 <match target="pattern">
 <test name="family">
 <string>SimSun</string>
 <string>SimSun-18030</string>
 <string>AR PL ShanHeiSun Uni</string>
 <string>AR PL New Sung</string>
 <string>MingLiU</string>
 </test>
 <edit binding="strong" mode="prepend" name="family">
 <string>Tahoma</string>
 <string>Arial</string>
 <string>Verdana</string>
 <string>DejaVu Sans</string>
 <string>Bitstream Vera Sans</string>
 </edit>
 </match>
 -->

 <match target="font">
 <test name="family">
 <string>Andale Mono</string>
 <string>Arial</string>
 <string>Comic Sans MS</string>
 <string>Georgia</string>
 <string>Impact</string>
 <string>Trebuchet MS</string>
 <string>Verdana</string>
 <string>Courier New</string>
 <string>Times New Roman</string>
 <string>Tahoma</string>
 <string>Webdings</string>
 <string>Albany AMT</string>
 <string>Thorndale AMT</string>
 <string>Cumberland AMT</string>
 <string>Andale Sans</string>
 <string>Andy MT</string>
 <string>Bell MT</string>
 <string>Monotype Sorts</string>
 </test>
 <test name="pixelsize" compare="less_eq">
 <double>16</double>
 </test>
 <edit name="autohint">
 <bool>false</bool>
 </edit>
 <edit name="antialias">
 <bool>true</bool>
 </edit>
 </match>

 <!-- 
 Synthetic emboldening for fonts that do not have bold face available 
 --> 
 <match target="font" > 
 <!-- check to see if the font is just regular --> 
 <test name="weight" compare="less_eq"> 
 <const>medium</const> 
 </test> 
 <!-- check to see if the pattern requests bold --> 
 <test target="pattern" name="weight" compare="more"> 
 <const>medium</const> 
 </test> 
 <!-- 
 set the embolden flag 
 needed for applications using cairo, e.g. gucharmap, gedit, ... 
 --> 
 <edit name="embolden" mode="assign" > 
 <bool>true</bool> 
 </edit> 
 <!-- 
 set weight to bold 
 needed for applications using Xft directly, e.g. Firefox, ... 
 --> 
 <edit name="weight" mode="assign"> 
 <const>bold</const> 
 </edit> 
 </match> 

 <match target="pattern">
 <test qual="any" name="family">
 <string>mono</string>
 </test>
 <edit name="family" mode="assign">
 <string>monospace</string>
 </edit>
 </match>

 <!--
 Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
 -->
 <match target="pattern">
 <test qual="any" name="family">
 <string>sans serif</string>
 </test>
 <edit name="family" mode="assign">
 <string>sans-serif</string>
 </edit>
 </match>

 <!--
 Accept deprecated 'sans' alias, replacing it with 'sans-serif'
 -->
 <match target="pattern">
 <test qual="any" name="family">
 <string>sans</string>
 </test>
 <edit name="family" mode="assign">
 <string>sans-serif</string>
 </edit>
 </match>

 <!--
 Load local system customization file
 -->
 <include ignore_missing="yes">conf.d</include>

 <!--
 Comic Sans MS font size
 -->
 <!--
 <match target="font" >
 <test name="family" >
 <string>Comic Sans MS</string>
 </test>
 <test name="pixelsize" compare="less_eq" >
 <double>14.7</double>
 </test>
 <edit name="pixelsize" mode="assign" >
 <double>14.7</double>
 </edit>
 </match>
 -->


</fontconfig>
上传的图像
linuxsir_shot.png (125.0 KB, 25 次查看)
firefox_shot.png (43.7 KB, 26 次查看)

作者: wduspa   发布时间: 2010-04-28

你的 sans-serif 里面列出了宋体,当然就会有宋体。

解决方法,把 conf 里面 sans-serif 节中的衬线字体都删除。如下面带减号的行。

代码:
 <!--
 Sans-serif faces
 -->
 <alias>
- <family>WenQuanYi Bitmap Song</family> 
 <family>Tahoma</family>
 <family>Verdana</family>
 <family>Arial</family>
 <family>Trebuchet MS</family>
 <family>Comic Sans MS</family>
- <family>SimSun</family>
 <family>SimHei</family>
- <family>FangSong_GB2312</family>
 <family>KaiTi_GB2312</family>
 <family>YouYuan</family>
 <family>LiSu</family>
- <family>STSong</family>
- <family>STZhongsong</family>
 <family>STXihei</family>
- <family>STFangsong</family>
 <family>STKaiti</family>
 <family>STXingkai</family>
 <family>STLiti</family>
 <family>STCaiyun</family>
 <family>STHupo</family>
 <family>STXinwei</family>
- <family>FZYaoTi</family>
- <family>FZShuTi</family>
 <family>Arial Unicode MS</family>
 <default><family>sans-serif</family></default>
 </alias>

作者: poet   发布时间: 2010-04-28

引用:
作者: poet
你的 sans-serif 里面列出了宋体,当然就会有宋体。

解决方法,把 conf 里面 sans-serif 节中的衬线字体都删除。如下面带减号的行。

代码:
 <!--
 Sans-serif faces
 -->
 <alias>
- <family>WenQuanYi Bitmap Song</family> 
 <family>Tahoma</family>
 <family>Verdana</family>
 <family>Arial</family>
 <family>Trebuchet MS</family>
 <family>Comic Sans MS</family>
- <family>SimSun</family>
 <family>SimHei</family>
- <family>FangSong_GB2312</family>
 <family>KaiTi_GB2312</family>
 <family>YouYuan</family>
 <family>LiSu</family>
- <family>STSong</family>
- <family>STZhongsong</family>
 <family>STXihei</family>
- <family>STFangsong</family>
 <family>STKaiti</family>
 <family>STXingkai</family>
 <family>STLiti</family>
 <family>STCaiyun</family>
 <family>STHupo</family>
 <family>STXinwei</family>
- <family>FZYaoTi</family>
- <family>FZShuTi</family>
 <family>Arial Unicode MS</family>
 <default><family>sans-serif</family></default>
 </alias>
但是文泉驿的宋体排在前面,为什么还是会匹配到宋体?

另外我觉得linux下的宋体效果没有win下的好,有什么办法不?

作者: wduspa   发布时间: 2010-04-28

引用:
作者: wduspa
但是文泉驿的宋体排在前面,为什么还是会匹配到宋体?

另外我觉得linux下的宋体效果没有win下的好,有什么办法不?
你的规则:
代码:
 <match target="pattern">
 <test name="family">
 <string>宋体</string>
 </test>
 <edit name="family" mode="assign">
 <string>SimSun</string>
 </edit>
 </match>
的意思是,如果family里面包含一个“宋体”,就给它改成“SimSun”。其实没必要,因为宋体文件里面写明了它也是“SimSun”,字体文件往往有不同语言的字体标识,至少宋体里面写有中文和英文的,具体显示哪一个应该和系统的locale有关。

在后面的alias规则里面,把那么多的字体都弄成sans-serif直接导致的后果就是这么多字体都能被前面那个 pattern 匹配……

另外 firefox / chrome / qt4 / opera / gtk+ app 都有各自的遵循 fontconfig 的方法,其中我觉得 gtk+ app 遵循的比较好,其他的或多或少都有小问题,所以最好用 gtk+ 程序去测试配置的结果。

作者: bearson   发布时间: 2010-04-28