Fonts in XFree86 : Installing fonts
Previous: Introduction
Next: Fonts included with XFree86

2. 安装字体

在 XFree86 中安装字体是个两步过程。首先,你需要建立一个字体目录,它包含所有有关的字体文件,还有某种索引文件。你接着需要通过把它包含在字体路径中来通知 X 服务器这个新目录的存在。

2.1. 安装位图字体

XFree86 服务器可以使用两种位图字体:跨平台的 BDF 格式和在某种程度上更高效的二进制 PCF 格式。 (XFree86 还支持废弃了的 SNF 格式。)

位图字体一般以 BDF 格式发布。在安装这些字体之前,需要(但不是绝对必须)把这些字体文件转换成 PCF 格式。这通过使用命令‘bdftopcf’来完成,例如:

$ bdftopcf courier12.bdf
你接着可能想要压缩这些结果 PCF 字体文件:
$ gzip courier12.pcf

在转换完字体之后,你应该把你希望获得的所有的字体文件复制放到任意一个目录中,比如‘/usr/local/share/fonts/bitmap/’。你接着应该通过运行命令‘mkfontdir建立索引文件‘fonts.dir’(详情请参见 mkfontdir(1) 手册页):

$ mkdir /usr/local/share/fonts/bitmap 
$ cp *.pcf.gz /usr/local/share/fonts/bitmap
$ cd /usr/local/share/fonts/bitmap 
$ mkfontdir 

余下的事情就是告诉 X 服务器这个新目录的的存在;参见设置服务器字体路径章节。

2.2. 安装可缩放字体

XFree86 支持四种格式的可缩放字体: Type 1、Speedo、TrueType 和 CIDFont。本节只使用前三种;关于 CIDFonts 的信息请参见在本章后面的安装 CID 字体小节。

安装可缩放字体非常类似于安装位图字体: 你建立一个带有字体文件的目录,并运行‘mkfontdir’来建立一个叫‘fonts.dir’的索引文件。

一个很大的区别是: ‘mkfontdir’不能自动识别可缩放字体文件。为此,你必须首先在一个叫做‘fonts.scale’的文件中为所有字体文件建立索引。这个文件与‘fonts.dir;文件有相同的格式,典型如下:

4
cour.pfa -adobe-courier-medium-r-normal-0-0-0-0-p-0-iso8859-1
cour.pfa -adobe-courier-medium-r-normal-0-0-0-0-p-0-iso8859-2
couri.pfa -adobe-courier-medium-i-normal-0-0-0-0-p-0-iso8859-1
couri.pfa -adobe-courier-medium-i-normal-0-0-0-0-p-0-iso8859-2 
第一行指示在这个文件中的条目的数目。在第一行后面的每行都由用空格分隔的两个字段组成;第一个字段是字体文件的名字,而第二个字段是出现在服务器上的字体的名字。这个名字应该符合 X 逻辑字体描述规范(参见X 逻辑字体描述章节)。在 mkfontdir(1) 手册页中完整的描述了这个文件的格式。

注意可以有多个行指向同一个字体文件。这通常用做使一个单一的字体可以在多种编码下获得;请参见字体和国际化章节。

尽管可以手动建立‘fonts.scale’文件,自动的生成它是更简单和方便的。可获得进行这项任务的实用工具,但是目前不包含在 XFree86 中。对于 Type 1 字体,你可以实用一个叫做‘type1inst’的实用工具,可从标准自由软件仓库获取。

对于 TrueType 字体,你可以实用‘ttmkfdir’,可从 Joerg Pommnitz 的 xfsft 页面获得。

在建立了‘fonts.scale’之后,你可以如同上面那样运行‘mkfontdir’;此时,你需要建立叫做‘encodings.dir’的一个编码文件的索引。这可以使用带‘-e’标志的‘mkfontdir’来完成:

$ cd /usr/local/share/fonts/Type1
$ mkfontdir -e /usr/X11R6/lib/font/encodings
译注:对于中文字体请使用下列命令来补充上中文编码:mkfontdir -e /usr/X11R6/lib/font/encodings -e /usr/X11R6/lib/font/encodings/large

详情请参见 mkfontdir(1) 手册页和后面的字体和国际化章节。

2.3. 安装 CID-keyed 字体

CID-keyed 字体格式是 Adobe Systems 为大字符集字体设计的。CID-keyed 字体,简写为 CIDFont,包含用字符 ID(CID)索引的一组图元(glyph)。

Adobe 作了一些样例 CIDFonts 并可从 O'Reilly 的 FTP 站点获得一组完整的 CMap。

为了把这些图元映射到合适的索引上,Adobe 提供了一组 CMap 文件。从 CIDFont 生成的字体的 PostScript 名字由用两个横杠分隔的 CIDFont 的名字和 CMap 的名字组成。例如,从使用了 CMap ‘UniKS-UCS2-H’的 CIDFont‘Munhwa-Regular’生成的字体叫做

Munhwa-Regular--UniKS-UCS2-H

在 XFree86 中的 CIDFont 支持要求非常严格的目录结构。主目录必须叫做‘CID’(它缺省的位于‘/usr/X11R6/lib/X11/fonts/CID;但也可以位于其他任何地方),并且应当为每个 CID 总集(collection)包含一个子目录。每个子目录必须包含叫做 CIDFont (包含实际的 CIDFont 文件)、CMap (包含所有需要的 CMap)、AFM (包含所有的字体米制(metric)文件) 和 CFM (最初是空的)的子目录。例如,对于字体 Munhwa-Regular ,它使用 CID 总集 Adobe-Korea1-0,目录结果如下:

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’文件。这个文件的格式与在(非 CID)缩放字体的情况下相同,但是它的第一列包含带‘.cid’扩展的 PostScript 字体名字而不是实际文件名字:

1
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

最后,你应该通过运行命令‘mkcfm’在目录‘CFM ’中建立字体米制摘要文件:

$ mkcfm /usr/local/share/fonts/CID
如果不能获得 CFM 文件,将仍能使用这个 CID 字体,但查询它们将花费很常时间。在对 CID-keyed 字体的任何部分做了变化的时候,或者在把 CID-keyed 字体复制到有不同的体系的其他机器的时候,你应该再次运行‘mkcfm’。

2.4. 设置服务器的字体目录

服务器在其中查找字体的那个目录列表叫做字体路径。通过把新字体目录放入字体路径中来通知服务器这个新字体的存在。

字体路径使用有序列表;如果一个客户的要求匹配多个字体,则使用在字体路径中的第一个字体。在进行匹配字体的时候,服务器在字体路径进行两遍查找: 在第一遍期间,它查找一个精确匹配;在第二遍期间,它查找适合于缩放的字体。

为了得到最佳的结果,可缩放的字体在字体路径中应当出现在位图字体的前端;这样,在有可能的精确匹配的时候服务器将偏好位图字体而不是可缩放字体,而在能缩放一个可缩放字体的时候避免缩放位图字体。(‘:unscaled’技巧仍然支持,但在 XFree86 4.0 和以后版本中不再需要。)

你可以通过键入下面的命令检查运行中的服务器的字体路径:

$ xset q

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(1) 手册页。

2.4.2. 字体路径的永久修改

(在服务器启动之后使用的)缺省的字体路径在 X 服务器的‘XF86Config’文件中指定。通过把所有涉及到的路径依据它们出现的次序添加到‘Files’段落的‘FontPath’条目中来实现。

FontPath "/usr/local/fonts/Type1"
...
FontPath "/usr/local/fonts/bitmap"

译注:在当前版本中 FontPath 的设置在 /etc/X11/fs/config 文件中。

详情请参见 XF86Config(5) 手册页。

2.5. 麻烦处理

如果你不能使用某个已经安装了的字体,首先要检查的事情是‘fonts.dir’文件是否正确并且它们对服务器是否是可读的。如果不是这些问题,最可能的就是你尝试使用你的服务器不支持这个格式的字体。

XFree86 支持 BDF、PCF、SNF、Type 1、Speedo、TrueType 和 CIDFont 字体格式。但是,不是所有的 XFree86 服务器都配备了所有的字体后端。

在多数平台上,XFree86 服务器是模块化的: 字体后端被包含在在运行时装载的模块中。在‘XF86Config’文件中用‘Load’指令来指定要装载的模块:

Load "type1"
译注:在当前版本中 Load 的设置在 /etc/X11/XF86Config-4 文件中。

如果你在装载指定格式的字体时遇到麻烦,你可以检查服务器的日志文件来查看有关的模块是否被正确的装载的。与 XFree86 一起发布的字体模块的列表如下:

请注意‘Load’指令的参数是大小写敏感的。
Fonts in XFree86 : Installing fonts
Previous: Introduction
Next: Fonts included with XFree86