LinuxSir.cn,穿越时空的Linuxsir!

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

FontConfig 配置实例一则

[复制链接]
发表于 2007-6-2 20:08:29 | 显示全部楼层 |阅读模式
故事是这样的: 最近我在家里的电脑上安装了一个 Debian + KDE。我不想在那里面输入中文,但希望能够阅读中文。这样,我只安装了中文字体,生成了中文的环境,但没有安装中文输入法。不知道是否是我配置的问题,只有当系统的 LANG 环境变量为 zh_CN 时,KDE 环境才能正常地显示中文;否则,如窗口的标题栏上的中文是乱码。于是,我在 ~/.Xsession 里加上了 export LANG=zh_CN。

但是我马上发现,进入 X 后 sans serif 字体也使用中文字体显示了。对我来说,中文字体里的英文字符是很难看的,我无法接受,所以需要修改它,使它也用中文字体显示。通过使用下面的命令:
  1. FC_DEBUG=4 fc-match 'sans serif'
复制代码

我发现在 zh_CN 环境下 FontConfig 总是使用中文字体来代表 sans serif。解决方案自然也就有了,编辑 ~/.fonts.conf,加入下面的内容:
  1. <?xml version="1.0"?>
  2. <fontconfig>
  3.         <match target="pattern">
  4.                 <test qual="any" name="family">
  5.                         <string>sans-serif</string>
  6.                 </test>
  7.                 <edit name="familylang" mode="assign">
  8.                         <string>en</string>
  9.                 </edit>
  10.                 <edit name="lang" mode="assign">
  11.                         <string>en</string>
  12.                 </edit>
  13.         </match>
  14. </fontconfig>
复制代码

意思是说,如果字体的 family 是 sans-serif,就将它的 familylang 和 lang 都设置为英文。这样,由于中文字体的 lang 属性为中文,与属性为英文的英文字体相比距离就远了些,从而英文字体就排在了中文字体的前面。

这正是我要解决的问题。
发表于 2007-6-2 21:17:34 | 显示全部楼层
我看你的要求只要设置LC_CTYPE=zh_CN.UTF-8就可以了吧,需要这么麻烦么
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-2 21:30:32 | 显示全部楼层
Post by x11
我看你的要求只要设置LC_CTYPE=zh_CN.UTF-8就可以了吧,需要这么麻烦么
我试了一下,这是不行的。可能 FireFox 可以,但 Konqueror 和 KDE 环境我没有成功。顺便把前后的效果放在下面了。虽然修改后那个向下的三角形无法正常显示,但对我来说,能够以好的方式显示大多数字符比能够显示不常用的一些字符重要得多。

我想 FontConfig 一定通过 LANG 或 LC_... 环境变量来匹配字体,通过对比设置 FC_DEBUG 前后 FontConfig 的输出也许可以验证一下,但我没有精力去做这个了。Anyway,我已经找到了一个解决方案。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2007-6-3 18:23:24 | 显示全部楼层
在我这边设定lang即可,familylang无所谓。
回复 支持 反对

使用道具 举报

发表于 2007-6-3 22:35:50 | 显示全部楼层
herberteuler,修改后,你的输出是什么?
fc-match 'sans serif' -v
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-4 18:48:44 | 显示全部楼层
Post by Jockey
在我这边设定lang即可,familylang无所谓。
嗯,确实可以,谢谢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-4 18:50:35 | 显示全部楼层
Post by 晨想
herberteuler,修改后,你的输出是什么?
fc-match 'sans serif' -v
下面的命令说明了设置之前和之后 fc-match 的输出:
  1. herbert@herbert-euler:~$ cat .fonts.conf
  2. <?xml version="1.0"?>
  3. <fontconfig>
  4.         <match target="pattern">
  5.                 <test qual="any" name="family">
  6.                         <string>sans-serif</string>
  7.                 </test>
  8.                 <edit name="lang" mode="assign">
  9.                         <string>en</string>
  10.                 </edit>
  11.         </match>
  12. </fontconfig>
  13. herbert@herbert-euler:~$ fc-match 'sans serif' -v
  14. Pattern has 27 elts (size 32)
  15.         family: "Bitstream Vera Sans"(s)
  16.         familylang: "en"(s)
  17.         style: "Roman"(s)
  18.         stylelang: "en"(s)
  19.         slant: 0(i)(s)
  20.         weight: 80(i)(s)
  21.         width: 100(i)(s)
  22.         size: 12(f)(s)
  23.         pixelsize: 12.5(f)(s)
  24.         foundry: "bitstream"(s)
  25.         hintstyle: 3(i)(s)
  26.         hinting: FcTrue(s)
  27.         verticallayout: FcFalse(s)
  28.         autohint: FcFalse(s)
  29.         globaladvance: FcTrue(s)
  30.         file: "/var/lib/defoma/fontconfig.d/B/Bitstream-Vera-Sans.ttf"(s)
  31.         index: 0(i)(s)
  32.         outline: FcTrue(s)
  33.         scalable: FcTrue(s)
  34.         dpi: 75(f)(s)
  35.         scale: 1(f)(s)
  36.         charset: 0000: 00000000 ffffffff ffffffff 7fffffff 00000000 ffffffff ffffffff ffffffff
  37.         0001: c00230c0 00030000 c00c0006 61000003 00040000 00000000 00000000 00000000
  38.         0002: 00000000 00000000 00000000 00000000 00000000 00000000 3f0000c0 00000000
  39.         0003: 00000000 00000000 00000000 00000000 00000000 00000200 00000001 00000000
  40.         0020: 77180000 06010047 00000010 00000000 00000000 00001000 00000000 00000000
  41.         0021: 00000000 00000004 00000000 00000000 00000000 00000000 00000000 00000000
  42.         0022: 46268044 00000800 00000100 00000031 00000000 00000000 00000000 00000000
  43.         0025: 00000000 00000000 00000000 00000000 00000000 00000000 00000400 00000000
  44.         00fb: 00000006 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  45. (s)
  46.         lang: aa|ast|ay|bi|br|ch|co|da|de|en|es|et|eu|fi|fj|fo|fr|fur|fy|gd|gl|gv|ho|ia|id|ie|io|is|it|lb|mg|nb|nds|nl|nn|no|oc|om|pt|rm|sma|smj|so|sq|sv|sw|tn|tr|ts|vo|vot|wa|xh|yap|zu(s)
  47.         fontversion: 131072(i)(s)
  48.         fontformat: "TrueType"(s)
  49.         embeddedbitmap: FcTrue(s)
  50.         decorative: FcFalse(s)

  51. herbert@herbert-euler:~$ mv .fonts.conf _fonts.conf
  52. herbert@herbert-euler:~$ fc-match 'sans serif' -v
  53. Pattern has 32 elts (size 48)
  54.         family: "AR PL ShanHeiSun Uni"(s)
  55.         familylang: "zh-tw"(s)
  56.         style: "Regular"(s)
  57.         stylelang: "en"(s)
  58.         slant: 2(i)(w)
  59.         weight: 1(i)(w)
  60.         width: 100(i)(s)
  61.         size: 12(f)(s)
  62.         pixelsize: 12.5(f)(s)
  63.         spacing: 0(i)(w)
  64.         foundry: "unknown"(s)
  65.         antialias: FcFalse(w)
  66.         hintstyle: 3(i)(s)
  67.         hinting: FcTrue(w)
  68.         verticallayout: FcFalse(w)
  69.         autohint: FcFalse(w)
  70.         globaladvance: FcFalse(w)
  71.         file: "/var/lib/defoma/fontconfig.d/S/ShanHeiSun-Uni.ttf"(s)
  72.         index: 0(i)(s)
  73.         outline: FcTrue(s)
  74.         scalable: FcTrue(s)
  75.         dpi: 75(f)(s)
  76.         scale: 1(f)(s)
  77.         minspace: FcFalse(w)
  78.         charset: 0000: 00000001 ffffffff ffffffff 7fffffff 00000000 ffffffff ffffffff ffffffff
  79. # 此处略去很多行。。。。。。。
  80.        0f05: 00000003 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  81. (s)
  82.         lang: "hak"(w)
  83.         fontversion: 6553(i)(s)
  84.         capability: "otlayout:DFLT otlayout:hani otlayout:latn"(s)
  85.         fontformat: "TrueType"(s)
  86.         embolden: FcFalse(w)
  87.         embeddedbitmap: FcTrue(s)
  88.         decorative: FcFalse(s)

  89. herbert@herbert-euler:~$
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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