jsliu 发表于 2005-10-12 12:21:08

我的中文字体美化方案

这些知识都是参考网上的朋友们的,我只是将一些分散的东西综合一下,在这里我向这些网上的朋友表示感谢。

问题与想法:

1.为linux设置系统字体(使其支持中文):

要为系统设置中文字体,首先要对系统设置使她能够支持这种字体。
安装系统时要安装中文字体包,不同的系统的中文字体包可能是不同的。我的redhat9.0的中文包是:ttfonts-zh_CN(可以在网上查找,推荐网站:rpmfind.net)

在Redhat linux 9 中,应该是修改/etc/sysconfig/i18n文件。
关于i18n文件:
这个文件与我们的系统中文显示密切相关,设置不好的话,很容易出现显示问题。这个文件在/etc/sysconfig/。
我的此文件的内容是:
LANG="zh_CN.GB2312"   ##这里可以是LANG="zh_CN.UTF-8",也可以是LANG="zh_CN.GB18030"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:zh_CN.GB2312:zh_CN:zh:zh_CN.gbk:zh_CN:zh:zh_HK.UTF-8:zh_HK:zh:zh_CN.UTF-8:zh_CN:zh:zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
在SUPPORTED这一行里支持的越多,那么显示的文体和编码就越多。

我个人感觉我的这个文件配置很好,也很全。说实话不管是utf8、gb2312还是gb18030对
中文的完全正确显示都是不容易的,utf8是通用的,但是有些软件不支持,比如zhcon(这个是什么下面再说);对于gb2312也就是说这个文件里面的LANG=“zh_CN.GB2312"来说也有问题,比如你在其它的非此种编码的地方复制过来的中文名称的文件名就不能正确显示(比如中文目录显示为带\者是带%的一排东西),但是它有一个很简单的解决办法,就是你把文件名修改一下就可以正确显示了,如果不想改,就改过去再改过来。但是文件多了就不好办了。

Redhat9.0和Fedora系列默认使用的是UTF-8编码,由于这种编码是UNICODE,所以在这种编码下在/etc/fstab文件不用加iocharset=gb2316选项就能正确显示中文名。但是在这种编码下新建的文件名都将使用这种编码,这导致了这些新文件的文件名在WINDOWS中(如用explore2fs)是不能正确显示的,因为WINDOWS中也用gb2312编码,所以为了方便,必须改系统的默认编码为gb2312,这需要将/etc/sysconfig/i18n文件中所有zh_CN.UTF-8都改为zh_CN.gbk,这样在FC2.0中新建的文件在WINDOWS就可正常显示了。而且在/etc/fstab中仍需像从前那样加上选项iocharset=gb2312。其实UTF-8编码是一种很优秀和方便的编码,但为了与其它系统的交互的方便,只能仍用回原先的GBK了。

终端下显示中文是乱码:
修改.bashrc 添加
    export LC_ALL=zh_CN
    export LANG=zh_CN
个人没有试过,应为做了上面的工作后我的终端已经显示正常了:)

默认情况下vi和gedit都不能正确显示gb2312编码的文件几种方法
1).运行 gconf-editor,把 gedit 的自动探测编码设置修改一下,加入 GB2312
2).编辑前用 iconv -f gb2312 -t utf8 filename 来转码
3).运行 vi,在打开文件之前,先设置 :set encoding=GB2312
4).用 gedit, kwrite, mozilla composer 或者 eclipse 的编辑器,都支持 GB2312 编码
5).用 emacs

2. Linux中的程序用的中文字体的引擎是不同的,所以要进行分开的设置。
Linux用的是xfs,也就是字体服务器。X有两个字体系统,一个是核心字体系统,一个是Xft。(关于xft、fontconfig、freetype或xtt的问题可以在网上搜索解决,这里就不在重申了)

为系统设置好中文字体后,就可以添加新的字体了。如果你觉得在Linux下的字体不好看,可以考虑用Windows下的字体,但是根据我的经验在windows下的字体在Redhat中只能设到9号,所以只有当你的Linux能够用1024x768显示的时候才能好看一点,要是只能800x600的话,还是用Linux默认的字体好了。

按照网上朋友的习惯,我们以windows下的simsun.ttc,tahoma.ttf两个字体作为实例。
   创建 /usr/share/fonts/local/ 目录(创建你想放字体的目录);
   把新字体文件复制到 /usr/share/fonts/local/ 中使用以下命令来更新字体信息:
         ttmkfdir -d /usr/share/fonts/local/ -o /usr/share/fonts/local/fonts.scale
   把fonts.scale拷贝出来一份fonts.dir;
   将存放新字体的目录路径加入到XF86config配置文件的Section "Files"区域中
         例如:
             Section "Files"
               FontPath   "/usr/share/fonts/local/"
         或用命令:chkfontpath --add /usr/share/fonts/local/
   使用以下命令来重新启动 xfs 字体服务器:
         service xfs reload

你的gtk1程序已经可以使用字体了,但是在gtk1程序里当然还要指定你究竟要使用什么字体。对gtk1程序使用什么字体有一个全局配置文件/etc/gtk/gtkrc.zh_CN
# This file defines the fontsets for Chinese language (zh) using
# the simplified chinese standard GuoBiao as in mainland China (CN)
#
# 1999, Pablo Saratxaga <[email protected]>
#
style "gtk-default-zh-cn" {
fontset = "-*-bitstream vera sans-medium-r-normal-*-*-120-*-*-p-*-microsoft-cp1252,\
-*-simsun-medium-r-normal-*-12-*-*-*-*-*-gbk-0"
}
class "GtkWidget" style "gtk-default-zh-cn"

这个文件告诉程序,对于英文字体优先使用bitstream vera sans字体,对于中文由于bitstream vera sans没有中文字体,就使用后面的simsun字体。
至此,gtk1程序的汉化全部完成。
-*-bitstream vera sans-medium-r-normal-*-*-120-*-*-p-*-microsoft-cp1252 这种字体表示方法是不是很复杂?有个小技巧帮你选择自己想要的字体,/usr/X11R6/bin/下有一个程序xfontsel ,运行它。自己摆弄一下你就明白了。在这里你可以看到gtk1程序所能找到的ttf字体,有一些就是从你刚才生成的fonts.dir里读出来的。通过它你还可以得到你需要的字体的正确表达格式。

关于Gtk2的程序由环境变量GTK2_RC_FILES决定,修改变量GTK2_RC_FILES显示出的具体文件就行。
    例如:echo $GTK2_RC_FILES的结果是/etc/gtk-2.0/gtkrc的话,就在其中加入以下语句:
      style "user-font"
        {
        font_name="Tahoma,SimSun 9"
        }
        widget_class "*" style "user-font"
        gtk-font-name="Tahoma,SimSun 9"
        其中Tahoma和Simsun是字体的名字,9是大小。

关于qt的字体配置用以下命令:
    /usr/lib/qt-3.2.1/bin/qtconfig(出现图形界面)

配置用户字体(注意,root和系统是不同的,root还是属于用户):
    kcmshell fonts 配置KDE的字体
    /usr/bin/gnome-font-properties 配置GNOME的字体

在配置用户字体的时候,我们只能选择一种字体,也就是说我们选择了Tahoma中文字体,就没有办法用simsun的英文字体了,这样系统显示中文是好看了,但是显示的英文会比较难看。解决的方法是修改font.conf或local.conf(这两个文件一般在/etc/fonts中):
    一般做如下修改就可以同时选择两种字体了:
      比如把方正圆体作为sans系列字体的默认中文字体,可以找到fonts.conf的类似于下面的一段:
        <alias>
        <family>sans-serif</family>
        <prefer>
        <family>Luxi Sans</family>
        <family>Nimbus Sans L</family>
        <family>Helvetica</family>
        <family>Kochi Gothic</family>
        <family>ZYSong18030</family>
        <family>AR PL KaitiM GB</family>
        <family>AR PL KaitiM Big5</family>
        <family>Baekmuk Gulim</family>
        <family>Verdana</family>
        <family>Arial</family>
        <family>SimSun</family>
        </prefer>
        </alias>

        改成如下般模样:
        <match target="pattern">
        <test qual="any" name="family">
        <string>sans-serif</string>
        </test>
        <edit name="family" mode="append" binding="strong">
        <string>Verdana</string>
        </edit>
        </match>
        <alias>
        <family>sans-serif</family>
        <prefer>
        <family>Luxi Sans</family>
        <family>Nimbus Sans L</family>
        <family>Helvetica</family>
        <family>Kochi Gothic</family>
        <family>Baekmuk Gulim</family>
        <family>Verdana</family>
        <family>Arial</family>
        <family>FZYuanTi</family>
        </prefer>
        </alias>

        即去掉里面的中文字体,加入FZYuanTi,这样当选择Arial/Verdana/Tahoma/Luxi Sans等sans系列英文字体时,会自动使用FZYuanTi作为中文字体。
        上面新加的一段的作用是,在选择"sans"字体时,英文字体强行使用Verdana,当然了,可以改成别的你喜欢的字体。
        同样方法,配置好serif和mono系列字体,比如把serif配成Times New Roman+SimSun,把mono配成SimHei等。
        因为sans/serif/mono特殊字体,为许多程序(mozilla,gedit等)默认使用,配好他们,程序中就无需另配了。

        打开AA显示
        如果你在fonts.conf中设置了关闭中文字体的AA显示的话,需要将其打开。看看fonts.conf中是否有类似于下面的段:
        <match target="font">
        <test name="size" compare="less_eq">
        <double>18</double>
        </test>
        <test name="size" compare="more_eq">
        <double>11</double>
        </test>
        <edit name="antialias" mode="assign">
        <bool>false</bool>
        </edit>
        </match>
        将其注释掉即可。

amumu 发表于 2005-10-30 11:29:39

因为英文的锯齿导致字体模糊,因此我为GTK2关闭了XFT:
GDK_USE_XFT=0
然后按照你的配置设置了~/.gtk-2.0,结果中文就变成方格了(SimSun已经安装了,使用XFT时正常)
请问有办法解决吗?
页: [1]
查看完整版本: 我的中文字体美化方案