LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1034|回复: 1

字体设置 局部无效

[复制链接]
发表于 2009-8-23 12:13:26 | 显示全部楼层 |阅读模式
问题的缘由是: 我想使用英文字体显示英文, 中文字体只应用在中文.

局部的意思是:
1. fluxbox控制的字体部分, 例如窗口标题
2. conky显示的字体, 例如mpd的播放信息
3. flash部分字体显示为空白

不好的解决办法: 全部使用中文字体
理想的解决办法: 使用~/.fonts.conf设置字体替换解决
暴力的解决办法: 使用fontforge合成字体

其中暴力的办法应该能根本解决问题, 但是在此之前最好再给理想一个机会.

下面要提及的几个字体:
  1. $ fc-list | egrep 'FZ|ITC|Parisine'
  2. Vintage ITC:style=Regular
  3. Parisine:style=Italic
  4. ParisineClair:style=Italic
  5. Parisine:style=Regular
  6. ParisineClair:style=BoldItalic
  7. ParisineClair:style=Bold
  8. ParisineClair:style=Regular
  9. Parisine:style=Bold
  10. FZLiBian\-S02,方正隶变_GBK:style=Regular
  11. Parisine:style=BoldItalic
  12. Parisine:style=BoldAlternate
  13. Parisine:style=BoldItalicAlternate
复制代码
另外我的 locale 是 "en_US.utf8"

我目前的设置如下, 大家看看有哪里没有照顾到的.

1. fonts.conf
我没有在/etc/fonts下做任何设置, 只是在~/.fonts.conf里面加入所有需要的设置
  1. <?xml version="1.0"?>
  2. <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
  3. <fontconfig>
  4. <match target="font" >
  5.         <edit mode="assign" name="rgba" >
  6.          <const>none</const>
  7.         </edit>
  8. </match>
  9. <match target="font" >
  10.         <edit mode="assign" name="hinting">
  11.          <bool>true</bool>
  12.         </edit>
  13. </match>
  14. <match target="font" >
  15.         <edit mode="assign" name="hintstyle">
  16.          <const>hintfull</const>
  17.         </edit>
  18. </match>
  19. <match target="font" >
  20.         <edit mode="assign" name="antialias">
  21.          <bool>true</bool>
  22.         </edit>
  23. </match>
  24. <!-- Autohinter is not turned on automatically.
  25. Only disable this if you have recompiled Freetype with the bytecode interpreter,
  26. which is run automatically.<br />  -->
  27. <match target="pattern" >
  28.         <edit mode="assign" name="autohint">
  29.          <bool>true</bool>
  30.         </edit>
  31. </match>
  32. <match target="font">
  33.                  <test name="weight" compare="more">
  34.                                  <const>medium</const>
  35.                  </test>
  36.                  <edit name="autohint" mode="assign">
  37.                                  <bool>false</bool>
  38.                  </edit>
  39. </match>
  40. <!--让字体引擎(FreeType)取消CJK字体的指定宽度-->
  41. <match target="font">
  42.                 <test target="pattern" name="lang" compare="contains">
  43.                         <string>zh</string>
  44.                         <string>ja</string>
  45.                         <string>ko</string>
  46.                 </test>
  47.                 <edit name="spacing">
  48.                         <const>proportional</const>
  49.                 </edit>
  50.                 <edit name="globaladvance">
  51.                                 <bool>false</bool>
  52.                 </edit>
  53. </match>
  54. <!--设定当默认字体不存在时,用以下字体替换-->
  55. <alias>
  56. <family>serif</family>
  57.   <prefer>
  58.    <family>Bitstream Vera Serif</family>
  59.    <family>DejaVu Serif</family>
  60.    <family>方正隶变_GBK</family>
  61.    <family>DejaVu Sans YuanTi</family>
  62.   </prefer>
  63. </alias>
  64. <alias>
  65. <family>sans-serif</family>
  66.   <prefer>
  67.    <family>DejaVu Sans</family>
  68.    <family>Bitstream Vera Sans</family>
  69.    <family>方正隶变_GBK</family>
  70.    <family>DejaVu Sans YuanTi</family>
  71.   </prefer>
  72. </alias>
  73. <alias>
  74. <family>monospace</family>
  75.   <prefer>
  76.    <family>DejaVu Sans Mono</family>
  77.    <family>Bitstream Vera Sans Mono</family>
  78.    <family>方正隶变_GBK</family>
  79.    <family>DejaVu Sans YuanTi</family>
  80.   </prefer>
  81. </alias>
  82. <alias>
  83. <family>Parisine</family>
  84.   <prefer>
  85.    <family>DejaVu Sans Mono</family>
  86.    <family>Bitstream Vera Sans Mono</family>
  87.    <family>方正隶变_GBK</family>
  88.    <family>DejaVu Sans YuanTi</family>
  89.   </prefer>
  90. </alias>
  91. <alias>
  92. <family>Vintage ITC</family>
  93.   <prefer>
  94.    <family>DejaVu Sans Mono</family>
  95.    <family>Bitstream Vera Sans Mono</family>
  96.    <family>方正隶变_GBK</family>
  97.    <family>DejaVu Sans YuanTi</family>
  98.   </prefer>
  99. </alias>
  100. <dir>~/.fonts</dir>
  101. </fontconfig>
复制代码

<!--设定当默认字体不存在时,用以下字体替换-->后面的alias部分就是对字体替换顺序的设置, 我试过在方正隶变_GBK前面加SimSum一行, 重新打开pcmanfm可以看到中文字体按照设置更换了. 也就是说, 这个设置方法可以在gtk程序中生效了.
[照理对Parisine和Vintage ITC字体的alias设置应该是没有必要的, serif, sans-serif, monospace应该包含所有字体了, 不过我不晓得啦...以防万一]

我的~/.gtkrc-2.0
  1. include "/usr/share/themes/Mist/gtk-2.0/gtkrc"
  2. style "user-font" {
  3.         font_name = "ParisineClair Bold 10"
  4. }
  5. widget_class "*" style "user-font"
  6. gtk-font-name="ParisineClair Bold 10"
复制代码

2. ~/.fluxbox/overlay
  1. menu.title.font: Mercury-12
  2. menu.frame.font: TheSans-12
  3. window.font: ParisineClair-10:bold
  4. toolbar.iconbar.focused.font: Mercury-8:bold
  5. toolbar.iconbar.unfocused.font: Mercury-8
  6. toolbar.clock.font: Terminus-10:bold
  7. toolbar.workspace.font: Vintage ITC-10:bold
复制代码
这个设置确实可以取代flux主题的字体设置, reload config后在窗口标题栏中立即生效, 但是中文字体是不显示的, 例如现在firefox的标题栏, 显示成
LinuxSir.Org - 五个小空格 - Mozilla Firefox
对,中文不是框框, 而是空白(linuxsir的多个连续空格总是被处理成一个...所以只好写字占位)
也试过 window.font: ParisineClair-10:bold|方正隶变_GBK-10, 一样没效果.
这让我觉得可能fluxbox读字体的方式不遵循~/.fonts.conf的规则?
但是就一个不行还勉强接受, 但是conky也不行, 就很可疑了~

3. ~/.conkyrc
有关字体设置的就两行
  1. use_xft yes
  2. xftfont Vintage ITC:size=9:bold
复制代码

对, 就一个英文字体 Vintage ITC, 这个字体本身显示的好好的, 但是候补中文字体却没有露脸的机会. 情况同fluxbox的窗口标题, 中文显示为空白. 但是你从前面可以看到, 我的~/fonts.conf已经对 Vintage ITC 进行过字体替换设置了.

4. firefox中flash部分中文字体不显示
我知道可以安装wqy-zenhei的nightly build解决, 看了一下其实安装过程除了装字体wqy-zenhei.ttc 就是装 44-wqy-zenhei.conf, 66-wqy-zenhei-sharp-no13px.conf, 66-wqy-zenhei-sharp.conf这几个到/etc/fonts/conf.d, 这几个文件貌似也就是用的 alias 替换字体而已。有什么不一样? 干吗非要装它?

如果实在不行, 那就只有暴力forge了
 楼主| 发表于 2009-8-23 18:25:15 | 显示全部楼层
好吧
我暴力了~

fontforge很好很强大

关键的一点是 EM SIZE 要设置对, 否则可能导致中英字体大小差别很大, 比如我第一次merge的时候没有设置这个, Lucida Grande 和 方正隶变杂交后 中文都跟蚂蚁一样大

另外, conky 和 fluxbox都需要 restart 才能正确加载新生成的杂交字体, 而不是仅仅 reload config.




还有flash的问题, 貌似 是字体字符集不够大??

在~/.fonts.conf里边设置字体替换alias可以立即生效, 比如 DejaVu Sans YuanTi 换成 SimSun 后, 字体如设置的那样改变了, 但显示的字还是那么多, 不能显示的就是不能显示... 但是显然 SimSun 的字符集应该是够用的, 这是为什么呢?
或者需要有什么方法重新编译flashplugin可以解决这个问题?

额。。显然, adobe的是闭源的。。。
奇怪为什么会如此, 使用wqy-zenhei.ttc作为fallback就可以显示全, simsun却不可以, 但显然在windows下边是可以的。
有人知道WQY是怎么做到的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表