LinuxSir.cn,穿越时空的Linuxsir!

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

初探Debian的字体管理

[复制链接]
发表于 2002-11-23 03:47:32 | 显示全部楼层 |阅读模式
Linux下做汉化经常被字体搞得晕乎乎的,一般都是跟着帖子依葫芦画瓢,也不知道为什么,一旦出问题就傻眼了,这种感觉实在不好,这段时间就硬着头皮看了点E文和以前兄弟们的文章,也不知道对不对,就斗胆做个总结后拿来跟兄弟们讨论了,不许笑话啊:-)希望能抛砖引玉,让我们对字体有个彻底的了解。

1、要构造一个可用的字体需要a)字体库,比如我们经常用到的.ttf或.ttc文件,当然还有其它格式的;b)有关该字体的配制文件,也就是fonts.dir、fonts.scale和fonts.alias,每个字体目录都是由这三个文件及文件中所描述到的字体文件组成;c)渲染该字体的后台引擎,如xtt、freetype、type1和speedo等;d)最后要告诉X服务器可用的字体目录,这里有两种方式,一是直接写在XF86Config-4文件的Files段,另外如果是使用xfs服务器,则要写在/etc/X11/fs/config文件的catalogue段。

2、对于字体库现在大家用得比较多的是微软的simsun.ttc和RedHat8中自带的zysong.ttc,如果大家的Windows是正版的,当然可以用simsun了,但如果不是,建议还是用zysong,既然有Linux了,我们就不应再用盗版软件了,我一直觉得那很不光彩。

3、fonts.dir和fonts.scale的语法,这两个文件一模一样,我到现在还没搞清为什么?言归正传,它们的语法具体如下(这是iceblood兄的原文,写得很好,我就照抄了:-)
fonts.dir的第一行一般是告诉Xwindows一共有多少行字体信息,从第二行开始起就是正式的字体设置信息了,一般分两部分,第一部分为参数部分,是配合第二部分来定义的,现在分析下面一行字体信息给大家一个参考:
ab=y:ai=-0.2:sw=1:bw=0.5:simsun.ttf-misc-simsun-bold-ro-normal--0-0-0-0-p-0-gb18030.2000-0
ab=y 启用粗体字,默认ab=n 既当没有设置的时候是不启用粗体的,配合bold同时使用.
ai=-0.4 左倾斜一个字的0.4的宽度,如果ai=0.4就是右倾斜一个字的0.4宽度,默认ai=0.请配合o或者i同时使用,由于这里是负的所以这里还需要配合r使用,所以后面是ro.
sw=1 字体宽度为1,默认为0.这个一般配合后面的p使用,使用p的时候,由于占用的是字符宽度,所以可能显示出来的字叠在一起,加上这个后就会把字和字的距离拉开.
bw=0.5 字体间距离为0.5个字的宽度,默认为0,假设你要使用斜体,由于斜体占的宽度比较宽,比如上面的bw=-0.4也就是说字体的上边部分左移0.4个字的宽度,那么我们为了看字的方便,需要吧字体宽度为之为bw=0.5这样有0.1之间的距离,不会导致字和字之间看起来重叠.
simsun.ttf 字体文件名,这个不用解释了.
misc 字体制造商
simsun 字体明称,这个我们可以随便修改,比如改成song,那么当我们在Xwindows里设置字体的时候找song字体就行了.
bold 粗体,这个还有一个选项medium(普通)假如使用了bold请同时把ab=y加上才起作用.
ro 反斜,其中r(Roman罗马体),i(Italic斜体),o(Oblique倾斜)当r和其他两个一起使用的时候为反斜.当使用i,o,ro,ri等的时候,请使用ai=n,其中n=0.2,-0.2,0.4,-0.4等.如果不设置ai=n,那么这些也都失去效果.
normal 字符集宽度为标准, 此外还有 condensed(压缩), narrow(窄), double(两倍宽)
0 像素大小,这个字体服务器会自动修改,所以一般为0.
0 点大小,同上.
0 X轴解析度,同上.
0 Y轴解析度,同上.
c 字间距为c,即一个字的距离,另外还有p,即字符距离
0 平均宽度,这个字体服务器会自动修改,所以一般为0.
asccii-0 字符集为asccii-0,其它还可以有很多,比如:gb2312.1980-0,gb18030.2000-1,gb18030.2000-0,gbk-0等

4、字体引擎xtt和freetype、type1不能同时使用,她们都是渲染truetype字体的引擎但用的方法不一样。对于simsun字体用xtt渲染效果最好,而zysong则要用freetype。但我碰到一个奇怪的问题,在Debian下用freetype渲染的zysong,字体效果不如RH8里的。

5、/etc/pango/pangox.aliases这个文件好像是用来定义系统中使用的sans、serif和monospace字体和真实字体的对应关系。

6、Debian通过引入defoma来简化字体管理,下面以为系统增加zysong.ttc为例来说明。
#defoma-hints truetype /usr/share/fonts/TrueType/zysong.ttc > zysong.hints
上面这条命令会启动一个交互的方式引导我们生成关于zysong.ttc的字体设定信息,并将该信息存在zysong.hints中,其中truetype告诉程序要配置的字体类型。
#defoma-font reregister-all zysong.hints
根据zysong.hints中的设定自动生成字体配置信息并存入/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType目录中的fonts.alias、fonts.dir、fonts.scale,也就是通过它我们不用再手动设置这三个文件了,然后她会在该目录下生成一个到zysong.ttc的链接。另外她还会自动更改pangox.aliases中的内容,如果还有其它程序设置为让defoma自动管理字体,她也会自动为其更新相应的内容,而这需要该程序提供相应的脚本,并向defoma注册。而要撤消一个字体则只需执行下面这个命令
#defoma-font unreregister-all zysong.hints
另外你必须将上面那个defoma用来存放字体信息的目录告诉Xserver。
因此总的来说defoma为我们简化了上面提到的1.b和5这两步。
另外,为了让defoma生成hints文件,你还要安装相应的脚本文件;而为了自动fonts.dir等字体配置信息文件,你要安装x-ttcidfont-conf包,同时要告诉她你是使用xtt或freetype来渲染字体。

7、对于gtk1.x的程序,如xmms和mozilla其界面的默认字体在/etc/gtk/gtkrc.zh_CN文件中定义,一般如下:
style "gtk-default-zh-cn" {
       fontset = "-misc-simsun-medium-r-normal--16-*-*-*-*-*-iso8859-1,\  -misc-simsun-medium-r-normal--16-*-*-*-*-*-gb2312.1980-0,*-r-*"
}
class "GtkWidget" style "gtk-default-zh-cn"
对于gtk2.x的程序直接在桌面首选项的字体中定义。

8、如果使用freetype的渲染引擎,则在mozilla的安装设置中要记得打开对freetype的支持,否则无法在网页中使用安装的字体。

9、KDE的字体设置,请教兄弟们

10、WMaker的字体设置,同上

11、XFCE的字体设置,同上

12、Enlightment的字体设置,同上


发表于 2002-11-23 03:59:02 | 显示全部楼层
pango是渲染字体用的底层库,用来支持多国字体, 使用UNICODE编码
可以在/usr/lib & /usr/X11R6/lib/modules/下面找到。
 楼主| 发表于 2002-11-23 04:09:51 | 显示全部楼层
doooom兄,你给我们讲讲pangox.aliases文件吧,我现在还有点糊涂。
发表于 2002-11-23 04:37:42 | 显示全部楼层
我的总的感觉就是PANGO只是被GTK依赖,真正其作用的只是那些LIB文件。真正的模块里面连ZH_CN都没有的。这个可以去他那个目录下面看(具体路径不确定,手边没LINUX没法查)。我的观点是这个文件对我们汉化没什么作用。而且我看过无数的汉化文章,各种版本的LINUX下的,都没有提到过这个文件。
发表于 2002-11-23 13:31:14 | 显示全部楼层
复杂复杂啊……还是我比较懒,全用gtk1的程序
 楼主| 发表于 2002-11-25 12:00:53 | 显示全部楼层
另外,defoma的字体管理还有一个前端工具
dfontmgr,不过这家伙胃口真大,居然要了我10M空间,哈哈我是唯美主义者:-)
发表于 2003-2-14 15:11:09 | 显示全部楼层
witkey兄能否写篇——Debian下中文环境的实现思路 的文章?我在这方面的知识又杂又碎,缺乏整体认识,我想也有不少人也和我一样吧?呵呵,请大家帮助!
发表于 2003-2-14 17:12:18 | 显示全部楼层
很专业!
发表于 2003-2-14 17:47:03 | 显示全部楼层
好!!! 顶一下!!!
 楼主| 发表于 2003-2-14 22:28:35 | 显示全部楼层
哈哈,不好意思,其实我是小菜鸟一只,接触Linux也就几个月时间,我是做市场营销的,Linux只是个人爱好,另外我真的不想再用盗版软件了,想想以前因买不起正版而不得不到处去买盗版软件的感觉实在不好,跟作贼似的,咱好歹也是受过高等教育的人,还知道点羞耻,现在好了,Linux已经让我彻底跟Windows说再见了,再也不用当小偷了,向一个合格的知识分子靠近了,真是舒服!!!

啊,扯远了。言归正传,要写一篇比较系统的有关Debian汉化的文章,嘿嘿,对我要求就高了,还得另请高明!不过如果只想对整个框架有个了解,建议看这两篇文章,虽然不是针对Debian的,但原理都一样。
1、http://www-900.ibm.com/developer ... gb18030/index.shtml
2、http://www-900.ibm.com/developer ... 6/part1/index.shtml
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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