看这个东西也是因为总是不明白在 X 里面的字体是怎么回事,想搞搞清楚,总是用别人的汉化/美化方法也不是长久之计。而这个汉化/美化的工作,我认为是Linux在中国走向普通用户,承担起日常工作的最后一个沟坎。在网上找了一下,东西还不少,这个文档是XFree86的,位置是在http://www.xfree86.org/current/fonts.html(http://www.xfree86.org/current/ 是Documentation for XFree86[tm] version 4.3.0)。它说得是比较全面而且权威的。希望能对像我一样的Newbie(我折腾了2年了,还是Newbie)们有所帮助。之所以译出来,也是逼自己看仔细点的一个方法。
注意它是最新的XFree86 4.3.0的文档,和4.2以及更早的版本也许会有不同。
文中有几段感觉没什么用的,也不太懂的,就没译。见谅。
第5部分有些东西可以先看。第6部分有参考资料。
希望Linux能越来越好。
有什么意见或建议,请发邮件至:lpqi@hotmail.com 。
====================================
名称:XFree86的字体
作者:Juliusz Chroboczek, jch@xfree86.org
日期:17 January 2003
译者:lpqi@hotmail.com
日期:28 April 2003
====================================
1.介绍
本文档描述了XFree86对字体的支持。“安装字体”面向想在XFree86中安装字体的用户;其他部分比较详细地描述了对字体的支持。
我们假设你已经对数字字体有相当的了解。如果有什么不清楚的,可以查看附录:本文档最后部分的背景信息。
1.1 两种字体系统
XFree86包含两种字体系统:核心X11字体系统,存在于所有X11实现中;xft字体系统,目前并未在除XFree86以外的X11实现中存在,但将来很有可能加入进去。
核心X11字体系统是从1987年出现的X11R1中继承下来的,它只能使用单色bitmap字体。在经过多年发展之后,它总算加入了可变形字体及旋转象形文字的支持。
Xft最初设计的目的就是为了对可变形字体提供更有效更好的支持。它不像核心字体系统,它支持反锯齿和子像素平滑等特性。可能这一点更重要,它为应用程序提供了对象形文字描绘方法的完整的控制,让排版和所见即所得的显示成为可能。最后,还还允许应用程序使用并未安装在系统中的字体,而是使用文件中嵌入的字体来进行显示。
Xft同核心字体系统不兼容:使用Xft要求对开发工具(用户接口库)进行较多的改变。因此,目前XFree86继续使用核心字体系统,而开发工具的作者们也已经准备尽快转向Xft。
2. 安装字体
这一部分解释了如何对Xft和核心字体系统进行配置以便使用刚安装的字体。
2.1. 配置Xft
Xft自己没有配置机制,而是依赖于fontconfig库来进行配置。这个库并不专用于XFree86,也不限于某种特定的字体显示机制。因此,本部分就是描述fontconfig而不是Xft如何工作的。
2.1.1. 在Xft中安装字体
Fontconfig在一系列常见的目录中寻找字体,包括所有的XFree86标准字体目录(缺省是`/usr/X11R6/lib/X11/lib/fonts/*'),和用户主目录下的`.fonts/'。为Xft安装字体只需将字体文件拷贝到这些目录之一下面。
$ cp lucbr.ttf ~/.fonts/
Fontconfig在下一次寻找时就能发现这些字体,并重建自己的字体列表。如果想在命令行上激活这个行为(比如想全面升级全系统的Fontconfig信息),可以使用`fc-cache'命令:
$ fc-cache
2.1.2. 微调Xft
Xft的行为由一组配置文件控制:全系统的配置文件是`/etc/fonts/fonts.conf',用户专用的是主目录下的`.fonts.conf'(如果设定了`FONTCONFIG_FILE'全局变量,这个文件可能不起作用。)
Fontconfig文件均由以下样式开头:
并以此行结束:
缺省的Fontconfig文件包括对`~/.fonts/'目录的寻找,这里是放置用户专用字体的地方。如果要加入一个新的字体目录,可用如下语法:
/usr/local/share/fonts/
另外一个有用的选项是关掉某个字体的防锯齿(平滑)功能,语法如下:
Lucida Console
false
也可用下述命令关闭对所有字体的平滑功能:
false
在LCD显示上,Xft支持子像素平滑。一般地,XFree86在使用LCD并用DVI连接到主机的笔记本电脑上会自动打开这一选项。以下命令可用以查证:
$ xdpyinfo -ext RENDER | grep sub-pixel
如果该命令没有印出任何东西,就需要手动配置。语法如下:
rgb
`'...`'之间的rgb用于指定像素元件在屏幕上显示的顺序,这必须和硬件相配:普通的LCD是rgb,backwards LCD使用bgr,顺时针旋转后用vrgb,反向用vbgr。
2.1.3. 配置应用程序
Because most current applications use the core fonts system by default, it is necessary to explicitly configure them to use Xft. How this is done depends on the application.
由于许多应用程序缺省是使用核心字体系统的,所以要使用Xft,就必须进行配置。方法根据程序不同而有所区别。
XTerm使用 `-fa' 的命令行选项就可以使用Xft,也可以通过设定`XTerm*faceName':
XTerm*faceName: Courier
or
$ xterm -fa "Courier"
对GTK+ 2.0(GNOME 2程序)程序来说,把`GDK_USE_XFT'设为 1 即可:
$ export GDK_USE_XFT=1
GTK+ 2.2 缺省即使用 Xft 。
对KDE程序来说,应在KDE的控制中心里打开字体面板,选择``Anti-alias fonts''。这个选项名词写错了,它实际上就是使用 Xft,而不是打开反锯齿选项,如果它已经在Xft的配置文件中关闭了的话。
(What about Mozilla?)
2.1.4. 难题
如果有些基于Xft的程序没胡注意到你做的这些修改,那可能是因为它们还在使用XFree86 4.2的Xft,只需让它们使用当前版本的Xft即可。大多数情况下,只要安装Xft和Fontconfig库就可以了。
如果不能升级共享库,可以查阅XFree86 4.2的Xft(3)手册页,以确定其配置机制。
2.2. 配置核心字体系统
安装核心字体系统的字体分两步。第1步,必须创建一个目录,其中放有字体文件和索引文件。第2步是把这个目录放到字体路径中,以便让X服务器知道它的存在。
2.2.1. 安装bitmap字体
XFree86可以使用bitmap字体,包括跨平台的BDF字体和更有效率的二进制PCF字体。(还支持较老的SNF字体)
bitmap字体通常都用BDF格式发布,但在安装之前,可以把它转为PCF格式,可用命令`bdftopcf':
$ bdftopcf courier12.bdf
然后对它进行压缩:
$ gzip courier12.pcf
转换之后,把这些字体拷贝到任意目录下,如`/usr/local/share/fonts/bitmap/',然后运行 `mkfontdir'命令来生成索引文件`fonts.dir'(可查看mkfontdir(1) manual page)
$ mkdir /usr/local/share/fonts/bitmap/
$ cp *.pcf.gz /usr/local/share/fonts/bitmap/
$ mkfontdir /usr/local/share/fonts/bitmap/
然后的工作就是告诉X服务器有个新的字体目录;可参考下面的字体路径设置部分。
2.2.2. 安装可变形字体
XFree86支持4种格式的可变形字体:Type 1, Speedo, TrueType 和 CIDFont。本部分只讨论前3种。最后一种放在后面讨论。
安装可变形字体同安装bigmap字体一样:创建一个目录,并运行`mkfontdir'来生成索引文件`fonts.dir'。
但也有一处不同:`mkfontdir'不能自动认出这是可变形字体。因此,必须先建立一个名为`fonts.scale'的文件,使用如下命令:
$ mkfontscale /usr/local/share/fonts/Type1/
$ mkfontdir /usr/local/share/fonts/Type1/
在某些情况下,可能要对生成的`fonts.scale'文件进行修改;为此可参考mkfontdir(1) 和 mkfontscale(1) manual page,也可参考本文档后面的核心字体部分及国际化部分。
2.2.3. 安装 CID-keyed 字体
这种字体是Adobe公司为大字符集语言设计的,其中包含了一象形文字,由字符ID(CID)进行索引。
为使这种文字有意义,Adobe提供了一套CMap文件,从CIDFont文件中产生的PS字体名词由CIDFont和CMap共同组成,中间用两个短横线相连,举例来说,由CIDFont`Munhwa-Regular'生成,使用CMap`UniKS-UCS2-H'的字体就叫做:
Munhwa-Regular--UniKS-UCS2-H
在XFree86中使用这种字体要求一个严格的目录结构,主目录必须是CID(缺省在`/usr/X11R6/lib/X11/fonts/CID'),但也可以放在任何地方,下面应该为每一个CID集合建立一个子目录,下面有三个子目录,分别是CIDFont,CMap和AFM(the font metric files)、CFM(初始情况下是空的)。如下所示:
CID/Adobe-Korea1/CIDFont/Munhwa-Regular
CID/Adobe-Korea1/CMap/UniKS-UCS2-H
CID/Adobe-Korea1/AFM/Munhwa-Regular.afm
CID/Adobe-Korea1/CFM/
CID/fonts.dir
CID/fonts.scale
在生成这个目录并拷贝了文件之后,应该再创建一个`tt/fonts.scale/'文件,这个文件的格式同其他可变形字体一样,但第一列含有PS字体名,还带有.cid的后缀。
Adobe-Korea1/Munhwa-Regular--UniKS-UCS2-H.cid
-adobe-munhwa-medium-r-normal--0-0-0-0-p-0-iso10646-1
(上述文字是一行)。然后运行 `mkfontdir' 生成 `fonts.dir'文件:
$ cd /usr/local/share/fonts/CID
$ mkfontdir
然后在CFM目录中运行 `mkcfm':
$ mkcfm /usr/local/share/fonts/CID
如果没有CFM文件,服务器也能使用CID字体,但查询起来时间会有点长。如果有变化,就得再运行一次这个命令。
2.2.4. 设置服务器字体路径
让服务器知道新的字体目录存在的方法就是把它放到字体路径中。
字体路径是有顺序的。如果客户端请求的字体有多个选择,把就用碰上的第一个。在寻找字体时,服务器会进行两次查询,第1次要求准确配合,第2次则寻找可变形的字体。
所以,最好把可变形字体放到bitmap字体的前面。这样,在有这个字体的情况下,服务器会合作bitmap,但如果有可变形字体可用也会忽略掉bitmap字体。(仍然可以使用`:unscaled',但在4.0及以后版本中已经不必须)
可以通过以下命令显示已经有的字体路径:
$ xset q
2.2.4.1. 临时修改字体路径
`xset'命令也可用于修改当前的字体路径。设置命令为xset fp,加入新路径是 xset +fp,加到最后则是xset fp+,如:
$ xset +fp /usr/local/fonts/Type1
$ xset fp+ /usr/local/fonts/bitmap
反过来,从前面删除一个用`xset -fp',从后面删除一个用`xset fp-',设为缺省值是`xset fp default'。其他信息,可查询 xset(1) manual page。
2.2.4.2. 字体路径的永久改变
缺省的字体路径(刚启动或使用`xset fp default'之后)在文件`XF86Config' 中设置。在Files一节中用FontPath设置,要注意顺序。
FontPath "/usr/local/fonts/Type1"
...
FontPath "/usr/local/fonts/bitmap"
如有疑问,可参考 XF86Config(5) manual page。
2.2.5. 难题
如果发现有哪种安装好的字体不能使用,第1件事就是检查`fonts.dir'文件是否正确,以及它是否能被X server读(通常是root权限,但要注意NFS安装的目录)。如果不是这个问题,那就是这个字体可能不被服务器支持了。
XFree86 支持 BDF, PCF, SNF, Type 1, Speedo, TrueType, OpenType 及 CIDFont 等字体,但并非所有的XFree86都配备了这些后端,并进行了配置。
在大多数平台上,XFree86是模块化的:字体后端也是模块,在运行时可以载入。装入模块在`XF86Config'文件中用“Load”进行设置(注意大小写敏感):
Load "type1"
如果还是有安装问题,可以看一下X server的log文件,看模块是否被正确载入了。模块如下:
"bitmap": bitmap fonts (`*.bdf', `*.pcf' and `*.snf');
"freetype": TrueType fonts (`*.ttf' and `*.ttc'), OpenType fonts (`*.otf' and `*.otc') and Type 1 fonts (`*.pfa' and `*.pfb');
"type1": alternate Type 1 backend (`*.pfa' and `*.pfb') and CIDFont backend;
"xtt": alternate TrueType backend (`*.ttf' and `*.ttc');
"speedo": Bitstream Speedo fonts (`*.spd').
3. XFree86中包含的字体
3.1. 标准 bitmap 字体
X11的标准(样本实现,SI)带有大量的bitmap字体,包括fixed族,Courier、Times、Helvetica及Lucida族的bitmap版,它们都以ISO 8859-1(ISO Latin Western-European)编码。
In XFree86, a number of these fonts are provided in Unicode-encoded font files instead. At build time, these fonts are split into font files encoded according to legacy encodings, a process which allows us to provide the standard fonts in a number of regional encodings with no duplication of work.
在XFree86中,这些字体中不少以Unicode编码,在创建时,这些字体可以被分成其他编码的字体文件,这样就让我们得以使用一些 地区编码的 标准字体,而不用再去做重复性的工作。如字体文件
/usr/X11R6/lib/X11/fonts/misc/6x13.bdf
with XLFD
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
是一个Unicode编辑的标准fixed字体,它可以支持 Latin, Greek, Cyrillic, Georgian, Armenian, IPA 以及其他符号。它里面的字形数量超过2800,涵盖了 ISO 8859 parts 1-5, 7-10, 13-15 编码形式,还包含所有的欧洲 IBM、Microsoft 代码页,甚至还有 KOI8,WGL4 以及其他多种字符集的支持。
这个字体在创建时会生成多种字体文件:
6x13-ISO8859-1.bdf
6x13-ISO8859-2.bdf
...
6x13-ISO8859-15.bdf
6x13-KOI8-R.bdf
他们各自都有 XLFDs :
-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-1
...
-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-15
-misc-fixed-medium-r-normal--13-120-75-75-c-60-koi8-r
fixed这个名字是下述名字的简写:
-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-1
3.2. ClearlyU Unicode 字体族
ClearlyU族提供12pt、100dpi的比例字体,包含Unicode所需的众多字形,总数约有7500个。
主 ClearlyU 字体使用如下的 XLFD :
-mutt-clearlyu-medium-r-normal--17-120-100-100-p-101-iso10646-1
它存在于以下字体文件中:
/usr/X11R6/lib/X11/fonts/misc/cu12.pcf.gz
其他的 ClearlyU 字体包括:
-mutt-clearlyu alternate glyphs-medium-r-normal--17-120-100-100-p-91-iso10646-1
-mutt-clearlyu pua-medium-r-normal--17-120-100-100-p-111-iso10646-1
-mutt-clearlyu arabic extra-medium-r-normal--17-120-100-100-p-103-fontspecific-0
-mutt-clearlyu ligature-medium-r-normal--17-120-100-100-p-141-fontspecific-0
Alternate Glyphs字体包含有额外的为某些语言所用的字型。很快就会有第2种这种字体出来,专为那些经常使用这种字型的地区设计(the Urdu heh,乌尔都?)
PUA字体中包含有特殊的字形信息,以用于某些描绘方式。
Arabic Extra字体为那些不含有所有字形的ISO 10646编码字符提供字形,其排序也大体上根据ISO 10646来。
Ligature字体包括有各种手写体,在增强的文本演示时比较有用。
3.3. 标准可变形字体
XFree86 包含了所有在X11R6中的可变形字体。
3.3.1. 标准 Type 1 字体
IBM Courier 字体包含了 ISO 8859-1 和 ISO 8859-2 编码,同时也有 Adobe Standard Encoding,其 XLFD 如下:
-adobe-courier-medium-*-*--0-0-0-0-m-0-*-*
字体文件是:
/usr/X11R6/lib/X11/fonts/Type1/cour*.pfa
Adobe Utopia 字体仅含有 ISO 8859-1 和 Adobe Standard Encoding,其 XLFD 如下:
-adobe-utopia-*-*-normal--0-0-0-0-p-0-iso8859-1
字体文件是:
/usr/X11R6/lib/X11/fonts/Type1/UT*.pfa
最后,XFree86 还包含有 Bitstream Courier 和 Charter 的 Type 1 版本,其字 XLFD 如下:
-bitstream-courier-*-*-normal--0-0-0-0-m-0-iso8859-1
-bitstream-charter-*-*-normal--0-0-0-0-p-0-iso8859-1
字体文件是:
/usr/X11R6/lib/X11/fonts/Type1/c*bt_.pfb
3.3.2. 标准 Speedo 字体
XFree86 包含 Bitstream Courier 和 Charter 字体的Speedo 版本,要想使用这种字体,必须载入`Speedo' 字体后端。
这些字体都是 ISO 8859-1 编码,差不多全部含有 ISO 8859-2,其 XLFD 如下:
-bitstream-courier-*-*-normal--0-0-0-0-m-0-*-*
-bitstream-charter-*-*-normal--0-0-0-0-p-0-*-*
字体文件是:
/usr/X11R6/lib/X11/fonts/Speedo/font*.spd
3.4. Bigelow & Holmes Luxi字体族
XFree86 包含 Luxi 族的可变形字体,TrueType 和 Type 1 格式都有,包含有 Luxi Serif, XLFD 如下:
-b&h-luxi serif-medium-*-normal--*-*-*-*-p-*-*-*
Luxi Sans:
-b&h-luxi sans-medium-*-normal--*-*-*-*-p-*-*-*
以及 Luxi Mono:
-b&h-luxi mono-medium-*-normal--*-*-*-*-m-*-*-*
这些字体都含有罗马、斜体、粗体、粗斜体的变化。TrueType版的字型包含基本ASCII Unicode区,Latin 1区及扩展Latin 1区,还有一些附加的标点符号。通常这些字体都含有ISO 8859的1、2、3、4、9、13和15,还有Adobe Standard encoding和Windows 3.1 字符集。
Type 1版的字形要略少一些,一般只有ISO 8859 1/2/15和Adobe Standard encoding。
以下省略一些关于Luxi字体的说明。
4. 关于核心字体的补充说明
这一部分对XFree86专用的X11核心字体系统增强功能进行说明。
4.1. 核心字体和国际化
可变形字体后端(Type 1, Speedo and TrueType)可自动对字体进行重新编码,只要在`fonts.dir'中对其 XLFD 进行了说明。如Type 1 Courier的说明如下:
cour.pfa -adobe-courier-medium-r-normal--0-0-0-0-m-0-iso8859-1
cour.pfa -adobe-courier-medium-r-normal--0-0-0-0-m-0-iso8859-2
解释时就会自动分出 ISO 8859-1 and ISO 8859-2 两种编码。
4.1.1. fontenc(字体编码) 层
有3种可变形后端(Type 1, Speedo, FreeType)使用一个通用的字体编码层进行字体的重新编码,所以就能共享编码数据,并可对字体的新locale进行简单的配置。
请注意:X-TrueType (X-TT)后端不使用“字体编码”层,而使用它自己定义的一种方法来进行编码工作。如果你只对X-TT有兴趣,你可以跳过Using Symbol Fonts,而让中间的信息不作用于X-TT。
在fontenc层中,编码都定义了一个名字(如iso8859-1),一般是一个数字和映射集号。映射定义了这种编码可被映射到fontenc所知道的某个编码的方法。现在这种映射有Unicode、Adobe字型名和任意的TrueType映射。
有一些编码已经被固定在fontenc中,总是可以使用的,而它们也不能轻易改动:
iso10646-1: Unicode;
iso8859-1: ISO Latin-1 (Western Europe);
iso8859-2: ISO Latin-2 (Eastern Europe);
iso8859-3: ISO Latin-3 (Southern Europe);
iso8859-4: ISO Latin-4 (Northern Europe);
iso8859-5: ISO Cyrillic;
iso8859-6: ISO Arabic;
iso8859-7: ISO Greek;
iso8859-8: ISO Hebrew;
iso8859-9: ISO Latin-5 (Turkish);
iso8859-10: ISO Latin-6 (Nordic);
iso8859-15: ISO Latin-9, or Latin-0 (Revised Western-European);
koi8-r: KOI8 Russian;
koi8-u: KOI8 Ukrainian (see RFC 2319);
koi8-ru: KOI8 Russian/Ukrainian;
koi8-uni: KOI8 ``Unified'' (Russian, Ukrainian, and Byelorussian);
koi8-e: KOI8 ``European,'' ISO-IR-111, or ECMA-Cyrillic;
microsoft-symbol and apple-roman: 只在TrueType字体中有用。
定义编码文件就可以把编码加入进去。如果有哪种字体编码是 fontenc 层不知道的,后端就会检查字体文件所在的目录(不一定非要是fonts.dir所在的目录!),寻找一个 `encodings.dir' 文件。如果找到了,就扫描它寻找编码,找到后读入。`mkfontdir' 命令如果加上`-e'的选项,后面接上包含有编码文件的目录名,就能自动生成`encodings.dir'文件。可参考mkfontdir(1) manual page。
常用的一些编码文件都可在XFree86中找到。也可以自己写编码文件。不详述。
4.1.2. 针对各种后端的 fontenc 注意事项
4.1.2.1. FreeType
对TrueType 和 OpenType 字体,FreeType会依次扫描映射,有PS的映射会被忽略,如果是TrueType或Unicode的就会继续扫描它的cmap,最后使用找到的第1个可用的。
省略关于Type1字体的说明。
如果不能找到一个可用的映射,FreeType会使用ISO 8859-1。
4.1.2.2. Type 1
4.1.2.3. Speedo
4.1.3. 编码目录文件格式
要想使用一种编码不被后端识别的字体,就需要在自己的字体目录下或在系统全局目录下(/usr/X11R6/lib/X11/fonts/encodings/)有一个`encodings.dir'文件。
这个文件同 `fonts.dir'的格式差不多。第1行也是声明共有多少个编码,其后每1行分成两列,名字和编码文件,可用相对目录,也可以用绝对目录。名字和文件中定义的名字要符合。如:
3
mulearabic-0 /usr/X11R6/lib/X11/fonts/encodings/mulearabic-0.enc
mulearabic-1 /usr/X11R6/lib/X11/fonts/encodings/mulearabic-1.enc
mulearabic-2 /usr/X11R6/lib/X11/fonts/encodings/mulearabic-2.enc
编码的名字必须在文件的`STARTENCODING' 或 `ALIAS'行中进行说明。
如果平台支持,编码文件可以压缩(compress or gzip)。
`encoding.dir'可以用`mkfontdir'命令进行维护,可以参考mkfontdir(1)手册页。
4.1.4. 编码文件格式
编码文件本身是自由格式的。多个空格还是一个,关键词大小写不敏感,但在字型的名字上,大小写还是很重要的。
数字可用十进制、16进制或8进制。
'#'开头的行是注释行,它可以出现在一行的任意地方,其后的字符会全部被忽略。
开头是名字或别名:
STARTENCODING mulearabic-0
ALIAS arabic-0
这个名字应适用于XLFD字体名,只能有一个'-'。
这个文件中可以声明编码的数量。
Unicode (ISO 10646):
STARTMAPPING unicode
a given TrueType ``cmap'':
STARTMAPPING cmap 3 1
PostScript glyph names:
STARTMAPPING postscript
文件中每一行都说明了从一种编码到另一种的映射关系。
0x21 0x0660
0x22 0x0661
...
简化的也可以一行说明一个区。
最后是:
ENDMAPPING
映射完后是:
ENDENCODING
如果用了没有定义的关键词,这一行会被忽略。
4.1.5. 符号字体
4.1.6. 关于使用不良编码的字体的提示
4.1.6.3. 定义别名
有些字体像 `adobe-fontspecific', `microsoft-win3.1' 等,其名称不合规范,要想用它们,就必须给他们一个合适的名字。
这可以写在 `fonts.alias' 文件中,这个文件的格式很简单,每一行写一个别名到字体名的映射即可。如:
"-ogonki-alamakota-medium-r-normal--0-0-0-0-p-0-iso8859-2"
"-ogonki-alamakota-medium-r-normal--0-0-0-0-p-0-adobe-fontspecific"
其准确语法可参考 mkfontdir(1) manual page。
4.2. 可变形核心字体的附加说明
FreeTyep后端(即freetype模块,以前也叫xfsft)可以处理TrueType和Type 1字体,这让它和X-TT和Type 1后端有冲突。
如果同时使用FreeType和Type 1后端,FreeType就会被用于处理Type 1字体。如果FreeType和X-TT同时使用,X-TT会被用于TrueType字体。
4.2.1. 字型描绘延迟
FreeType和X-TT在第一次使用某个字型时都会有一点延迟。因此,他们只能提供一个大致的字体“平均宽度”。
两种后端都支持character-cell字体的优化(几何上相同的字型,或终端字型),其特征是在 XLFD 中有一个 c 。如:
-misc-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1990-0
这种字体在描绘时就不用去计算尺寸,而相信它是一个character-cell字体,如觉得有用时可以使用。但需要注意的是并非所有的等宽字体都是这种字体。
4.2.2. 关于 FreeType 后端
FreeType目前基于FreeType 库的第2版,支持 fontenc 形式的国际化。支持TTF/TTC/OTF/OTC等多种字体。
为了读取TTC文件中的一个字体,必须在 fonts.dir 文件中声明它的号码,如:
:2:mincho.ttc -misc-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1990-0
指的就是这个TTC文件中的第2个字体。
4.2.3. 有关X-TT
`X-TrueType'基于FreeType 库的第 1 版,它不使用fontenc层来管理字体编码,它有自己的方法。
XTT扩展了`fonts.dir'的语法,加入了几个选项,主要是 TTCap :
:option=value:
在文件名前面声明。
最有用的TTCap是声明TTC文件中字体号的,即 fn :
:fn=2:mincho.ttc -misc-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1990-0
其他信息,可参考XTT的网站:http://x-tt.dsl.gr.jp/(好像连不上)
5. 附录:背景及术语
5.1. 字符和字型
击键和显示/打印出来的字型是不同的,有时候一对一,有时候不是,可能会有连字,如阿拉伯字。
从击键到字型有两步,先是从击键到字符,再从字符到字型。字符就是存储在计算机里的文件中的东西,关于它也有许多标准。
在代码和字符之间有一个映射关系,计算机必须知道哪个代码是哪个字符,如 US-ASCII, ISO 8859-1, KOI8-R, and JIS X 0208(1990)等都是编码。
字符集通常是8位编码,更早的有6位的。对象形文字来说,一般得用16位来编码。
5.2. 字体文件,字体和XLFD
传统上,印刷工叫它们字形和铅板。字形就是某种专门设计的字体,如 Times Italic 。而铅板就是一个用融化的铅铸出来的给定尺寸字形块。
数字字体存在字体文件里,其中存储着生成某种字形线条的信息。使用它的程序可以任意顺序读取其中的字形信息。
字体中还可以包含 位图 数据,这就是bitmap字体。它还可以包含数学描述,这就是可变形字体,常见的有Type 1(有时也叫ATM字体或PS字体)、TrueType和Speedo。
字形信息又必须有一种索引方法,Type1里一般是字形的名字,而TrueType里一般是一种特定的索引机制,比如Unicode。
X11核心字体系统使用字体文件中的数据来生成字体实例,它就是一系列特定尺寸字形的集合,并用一种给定的编码进行索引。
X11核心字体实例通常用一种XLFD来指定,即 X逻辑字体描述(X Logical Font Description),它以一个'-'开头,共有14个由'-'分开的区域,如:
-adobe-courier-medium-r-normal--12-120-75-75-m-70-iso8859-1
最后的 `iso8859-1'表明了这个字体的编码。
可变字体的XLFD中用0来代替一些区域(因为它们大小是不定的):
-adobe-courier-medium-r-normal--0-0-0-0-m-0-iso8859-1
这些字体也可以用短的名字来称呼,它就是一个名字,没有结构。有两个名字是一定要有的,如果它们打不开,X server就不能启动,一个叫 fixed ,是一个后备字体,如果指定字体打不开,就用它来代替。另一个叫 cursor ,实际上是鼠标指针的形状。
短名字一般是XLFD的别名,标准的 `fixed' 和 `cursor' 定义在:
/usr/X11R6/lib/X11/font/misc/fonts.alias
文件中。
5.3. Unicode
Unicode (http://www.unicode.org)是一个巨大的字符集,它定义现有及历史上的所有字符。它是开放的,也就是说任何时候都可以加入新的编码点(加入后不得改变)。因此,Unicode现在显得比较零散,通常只有一个个的子集。
Unicode同ISO 10646是并行的,其分配也经常是等同的,可以同时或交互使用这两个名字。
在X11核心字体中,Unicode编码的字体应该在XLFD的最后加上 `iso10646-1' 。
6. 参考
fontconfig(3) man page
mkfontdir(1) man page
及X(7), Xserver(1), xset(1), Xft(3), xlsfonts(1) and showfont(1) man page
XFree86当前文档:http://www.xfree86.org/current
comp.fonts FAQ:http://www.netmeg.net/faq/computers/fonts/
fontconfig: http://www.fontconfig.org/
xfsft: http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/ , http://www.joerg-pommnitz.de/TrueType/xfsft.html
作者:http://www.pps.jussieu.fr/~jch/software/
X-TT:http://x-tt.dsl.gr.jp/
CIDfonts:ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/
Unicode:http://www.unicode.org/
UTF-8 FAQ:http://www.cl.cam.ac.uk/~mgk25/unicode.html