文泉驿字体做得确实很漂亮,而且还是开源的,因此对于系统字体的美化我选择了文泉驿。可是有时在和其他人 交流文档时又不得不用MS的字体。在机器上装了MS字体之后,字体平滑问题一直很令我头痛,尤其在看一些网页时,整个网页一片模糊,如新华网。关闭了平滑 之后,当字很小时又是一堆在一处,而且英文字体很难看。在Ubuntu 5.10时这个问题基本上得到了解决,而到了6.06使用以前的设置方法已经不管用了,参考了论坛、Wiki以及网上的一些文章,用了半天时间终于解决了 所有问题。
预期目标:
1、使用文泉驿字体进行系统美化
2、安装MS的宋体(SimSun),宋体-18030(SimSun-18030),黑体(SimHei),楷体_GB2312(KaiTi_2312),仿宋_GB2312(FangSong_GB2312)
3、使用网页设定的字体浏览网页,如新华网一般在页面上规定宋体和楷体
4、对特定范围字体关闭AA
5、解决Firefox中文泉驿字体过粗问题
实现步骤:
1、安装文泉驿字体
新装的系统默认是没有安装make的,可以通过sudo apt-get install make来安装
引用: cd ~

mkdir tmp 
  
 cd tmp 
  
 wget 
  http://ftp.ubuntu.org.cn/wqy/wqy-bitmapfont-bdf-nightly_build.tar.gz 
  
 tar zxvf wqy-bitmapfont-bdf-nightly_build.tar.gz 
  
 cd wqy-bitmapfont 
  
 sudo apt-get install bdftopcf 
  
 make 
  
 sudo cp *.pcf /usr/share/X11/fonts/misc/


然后进行配置,使系统支持点阵字体
sudo gedit /etc/fonts/conf.d/50-xfonts-wqy.conf

把下面的代码粘贴进去,保存退出
引用: <selectfont>

<acceptfont> 
  
 <pattern> 
  
 <patelt name="family"><string>WenQuanYi Bitmap Song</string></patelt> 
  
 </pattern> 
  
 </acceptfont> 
  
 </selectfont> 
  
2、安装MS字体 
  
cd /usr/share/fonts 
  
sudo mkdir zh_CN 
  
然后将MS的字体文件(simsun.ttc,SimSun18030.ttc,simhei.ttf,simkai.ttf,simfang.ttf)复制到zh_CN目录下,然后 
  
cd zh_CN 
  
sudo mkfontscale 
  
sudo mkfontdir


sudo fc-cache

3、修改language-selector.conf文件(language-selector所指向的文件)

cd /usr/share/language-selector/fontconfig 
  
sudo cp zh_CN zh_CN_backup 
  
sudo gedit /etc/fonts/language-selector.conf 
  
使用下面的代码替换掉里面的全部内容 
  
引用: <fontconfig> 
  
 <alias> 
  
 <family>serif</family> 
  
 <prefer> 
  
 <family>Bitstream Vera Serif</family> 
  
 <family>DejaVu Serif</family> 
  
 <family>WenQuanYi Bitmap Song</family> 
  
 <family>SimSun</family> 
  
 <family>AR PL ShanHeiSun Uni</family> 
  
 <family>AR PL ZenKai Uni</family> 
  
 </prefer> 
  
 </alias> 
  
 <alias> 
  
 <family>sans-serif</family> 
  
 <prefer> 
  
 <family>Bitstream Vera Sans</family> 
  
 <family>DejaVu Sans</family> 
  
 <family>WenQuanYi Bitmap Song</family> 
  
 <family>SimSun</family> 
  
 <family>AR PL ShanHeiSun Uni</family> 
  
 <family>AR PL ZenKai Uni</family> 
  
 </prefer> 
  
 </alias> 
  
 <alias> 
  
 <family>monospace</family> 
  
 <prefer> 
  
 <family>Bitstream Vera Sans Mono</family> 
  
 <family>DejaVu Sans Mono</family> 
  
 <family>SimSun</family> 
  
 <family>AR PL ShanHeiSun Uni</family> 
  
 <family>WenQuanYi Bitmap Song</family> 
  
 <family>AR PL ZenKai Uni</family> 
  
 </prefer> 
  
 </alias> 
  
 <match target="font" > 
  
 <test name="family" compare="contains" > 
  
 <string>Song</string> 
  
 <string>Sun</string> 
  
 <string>Kai</string> 
  
 <string>Ming</string> 
  
 </test> 
  
 <!-- check to see if the font is just regular --> 
  
 <test name="weight" compare="less_eq"> 
  
 <int>100</int> 
  
 </test> 
  
 <test compare="more_eq" target="pattern" name="weight" > 
  
 <int>180</int> 
  
 </test> 
  
 <edit mode="assign" name="embolden" > 
  
 <bool>true</bool> 
  
 </edit> 
  
 </match> 
  
 <match target="font" > 
  
 <test name="family" compare="contains" > 
  
 <string>Song</string> 
  
 <string>Sun</string> 
  
 <string>Kai</string> 
  
 <string>Ming</string> 
  
 <string>宋体</string> 
  
 <string>宋体-18030</string> 
  
 <string>黑体</string> 
  
 <string>新宋体</string> 
  
 <string>新宋体-18030</string> 
  
 <string>楷体_GB2312</string> 
  
 <string>仿宋_GB2312</string> 
  
 <string>隶体</string> 
  
 <string>SimSun</string> 
  
 <string>SimSun-18030</string> 
  
 <string>SimHei</string> 
  
 <string>NSimSun</string> 
  
 <string>NSimSun-18030</string> 
  
 <string>KaiTi_GB2312</string> 
  
 <string>FangSong_GB2312</string> 
  
 <string>LiSu</string> 
  
 </test> 
  
 <edit name="globaladvance"> 
  
 <bool>false</bool> 
  
 </edit> 
  
 <edit name="spacing"> 
  
 <int>0</int> 
  
 </edit> 
  
 <edit name="hinting"> 
  
 <bool>true</bool> 
  
 </edit> 
  
 <edit name="autohint"> 
  
 <bool>false</bool> 
  
 </edit> 
  
 <edit name="antialias" mode="assign"> 
  
 <bool>true</bool> 
  
 </edit> 
  
 <test name="pixelsize" compare="more_eq"> 
  
 <int>12</int> 
  
 </test> 
  
 <test name="pixelsize" compare="less_eq"> 
  
 <int>24</int> 
  
 </test> 
  
 <edit name="antialias" mode="assign" > 
  
 <bool>false</bool> 
  
 </edit> 
  
 </match> 
  
 </fontconfig>


language-selector.conf前一部分为字体渲染顺序,这里把文泉驿字体提到了第二位,优先于原来的ShanHeiSun。中间 那部分对字体进行加粗,由于文泉驿字体已经含粗体,再加粗会出现过粗问题,因此增加了一个条件,即仅在字体中不含粗体时加粗。后一部分设置字体属性,这里 将列表中的字体,包括宋体等设为了在12px~24px之间关闭AA(即平滑效果),超过这个范围开启AA,使得屏幕上的字体更漂亮。需要注意的是,如果 系统中不存在这其中的任一个字体,会使整个文件失效,系统默认采用fonts.conf进行配置。

按照上面的方法,即便是Bitstream和DejaVu排在前面,会令所有字体都使用文泉驿,包括中文和英文。如果想使用SimSun(微软的 宋体)进行美化时,只要将SimSun放到中文字体的前

面即可。不过这个时候所有英文字体会出现破碎,很难看。可以将下面的代码插入 到</fontconfig>前面,使得英文字体使用DejaVu。 
  
代码: <match target="pattern"> 
  
 <test qual="any" name="family" compare="eq"> 
  
 <string>sans-serif</string> 
  
 </test> 
  
 <edit name="family" mode="prepend" binding="strong"> 
  
 <string>SimSun</string></edit> 
  
 <edit name="family" mode="prepend_first" binding="strong"> 
  
 <string>DejaVu Sans</string> 
  
 </edit> 
  
 </match> 
  
 <match target="pattern"> 
  
 <test qual="any" name="family" compare="eq"> 
  
 <string>sans-serif</string> 
  
 </test> 
  
 <edit name="family" mode="assign" binding="strong"> 
  
 <string>DejaVu Sans</string> 
  
 <string>SimSun</string> 
  
 </edit> 
  
 </match> 
  
 <match target="pattern"> 
  
 <test name="family"> 
  
 <string>DejaVu Sans</string> 
  
 </test> 
  
 <edit name="family" mode="append" binding="strong"> 
  
 <string>SimSun</string> 
  
 </edit> 
  
 </match> 
  

 <match target="pattern"> 
  
 <test qual="any" name="family" compare="eq"> 
  
 <string>serif</string> 
  
 </test> 
  
 <edit name="family" mode="prepend" binding="strong"> 
  
 <string>SimSun</string></edit> 
  
 <edit name="family" mode="prepend_first" binding="strong"> 
  
 <string>DejaVu Serif</string> 
  
 </edit> 
  
 </match> 
  
 <match target="pattern"> 
  
 <test qual="any" name="family" compare="eq"> 
  
 <string>serif</string> 
  
 </test> 
  
 <edit name="family" mode="assign" binding="strong"> 
  
 <string>DejaVu Serif</string> 
  
 <string>SimSun</string> 
  
 </edit> 
  
 </match> 
  
 <match target="pattern"> 
  
 <test name="family"> 
  
 <string>DejaVu Serif</string> 
  
 </test> 
  
 <edit name="family" mode="append" binding="strong"> 
  
 <string>SimSun</string> 
  
 </edit> 
  
 </match> 
  

 <match target="pattern"> 
  
 <test qual="any" name="family" compare="eq"> 
  
 <string>monospace</string> 
  
 </test> 
  
 <edit name="family" mode="prepend" binding="strong"> 
  
 <string>SimSun</string></edit> 
  
 <edit name="family" mode="prepend_first" binding="strong"> 
  
 <string>DejaVu Sans Mono</string> 
  
 </edit> 
  
 </match> 
  
 <match target="pattern"> 
  
 <test qual="any" name="family" compare="eq"> 
  
 <string>monospace</string> 
  
 </test> 
  
 <edit name="family" mode="assign" binding="strong"> 
  
 <string>DejaVu Sans Mono</string> 
  
 <string>SimSun</string> 
  
 </edit> 
  
 </match> 
  
 <match target="pattern"> 
  
 <test name="family"> 
  
 <string>DejaVu Sans Mono</string> 
  
 </test> 
  
 <edit name="family" mode="append" binding="strong"> 
  
 <string>SimSun</string> 
  
 </edit> 
  
 </match>


当然,跟据个人口味,如果偏好Bitstream的字体,只需把这段代码中的DejaVu全都替换成Bitstream Vera就可以了。当然,将这一部分中的英文字体都替换成Times New Roman(要先安装这个字体才行),就真的成了M$的了,个人不喜欢。
现在感觉很不错,充分享受Ubuntu!


已知问题,本打算仅通过修改配置文件的方式来进行美化,结果发现了一些问题:
1、使用文泉驿字体进行美化时,evince内无法显示中文。
解决办法:可以用Adobe Reader来阅读pdf文档
2、使用Simsun进行美化后,加粗英文字体会出现破碎现象。使用文中的英文字体美化之后,会在Openoffice中无法更改字体,并且evince无法显示中文。
解决办法,不使用英文字体美化部分的方法,而是通过系统首选项中的“字体”把所有的字体项都设置为一个英文的字体,比如DejaVu Sans。
除此之外,还可以使用其它字体进行美化,有可能解决上述问题,如雅黑。


转载于:https://blog.51cto.com/axlrose/1289282