找回密码
 注册
查看: 1731|回复: 1

XFree86 中的字体(转贴)

[复制链接]
发表于 2003-12-16 21:54:41 | 显示全部楼层 |阅读模式
XFree86 中的字体
Juliusz Chroboczek, [email protected]
21 January 2001
翻译:寒蝉退士

译者声明:译者对文档不做任何形式的担保并且不承担任何责任,译者对文档不拥有任何权利并且不负担任何义务。

原文:http://www.xfree86.org/4.1.0/fonts.html


--------------------------------------------------------------------------------

1. 介绍
2. 安装字体
2.1. 安装位图字体
2.2. 安装可缩放字体
2.3. 安装 CID-keyed 字体
2.4. 设置服务器的字体路径
2.5. 麻烦处置
3. XFree86 包含的字体
3.1. 标准位图字体
3.2. ClearlyU Unicode 字体家族
3.3. 标准可缩放字体
3.4. Bigelow & Holmes Lucidux 家族
4. 字体和国际化
4.1. fontenc 层
4.2. 关于 fontenc 的特定后端的注解
4.3. 编码目录文件的格式
4.4. 编码文件的格式
4.5. 使用符号字体
4.6. 对使用不良编码的字体的提示
5. 对 TrueType 支持的补充注解
5.1. FreeType TrueType 后端
5.2. X-TrueType TrueType 后端
6. 附录:背景和术语
6.1. 字符和图元
6.2. 字体文件, 字体, 和 XLFD
6.3. Unicode
7. 参考
XLFD 描述


--------------------------------------------------------------------------------

$XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/fonts.sgml,v 1.13 2001/03/01 00:37:09 dawes Exp $



--------------------------------------------------------------------------------

1. 介绍
本文档描述 XFree86 中对字体的支持。安装字体章节致力于让不很专注的(casual)用户在 X 服务器中安装字体,本文档的其余部分更加详细的描述字体支持。

我们只描述在核心 X 协议内的字体支持。关于在渲染扩展如 GLX (OpenGL) 或 PEX 中的字体的要点超出了本文档的范围。

我们假定你熟悉数码字体。如果对任何事情有不清楚的地方,请参看在本文档结束处的附录背景和术语。


--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

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 一起发布的字体模块的列表如下:

"bitmap": 位图字体(‘*.bdf’,‘*.pcf’和‘*.snf’);
"type1": Type 1 字体(‘*.pfa’ 和‘*.pfb’) 和 CIDFonts;
"speedo": Bitstream Speedo 字体(‘*.spd’);
"freetype": TrueType 字体(‘*.ttf’ 和 ‘*.ttc’);
"xtt": 替代的 TrueType 后端(‘*.ttf’ 和 ‘*.ttc’)。
请注意‘Load’指令的参数是大小写敏感的。
--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

3. XFree86 包含的字体
3.1. 标准位图字体
X11 的样本实现附带了大量位图字体,包括‘fixed’家族,和位图版本的 Courier、Times 和 Helvetica。在 SI 中,这些字体以 ISO 8859-1 编码(ISO 拉丁西欧)提供。

在 XFree86 中,这些字体中的许多转而以 Unicode 编码的字体文件提供。在建造时,把字体分离到依据通行的编码方案编码的字体文件中,这个过程使我们可以用许多地域性的编码提供标准字体而不做重复工作。

例如字体文件

/usr/X11R6/lib/X11/fonts/misc/6x13.bdf

带有 XLFD
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1

是标准‘fixed’字体的一个 Unicode 编码版本,它带有对拉丁、希腊、斯拉夫、乔治亚、亚美尼亚、国际音标(IPA)和其他文字并加上了许多技术符号。它包含 2800 个图元,覆盖所有 ISO 8859 的 1-5、7-10、13-15 部分的所有字符,同所有欧洲 IBM 和 Microsoft 代码页、KOI8、WGL4、和许多其他字符集的功用(repertoire)一样。
下面这些字体在建造的时候用于生成字体文件

6x13-ISO8859-1.bdf
6x13-ISO8859-2.bdf
6x13-ISO8859-3.bdf
6x13-ISO8859-4.bdf
6x13-ISO8859-5.bdf
6x13-ISO8859-7.bdf
6x13-ISO8859-8.bdf
6x13-ISO8859-9.bdf
6x13-ISO8859-10.bdf
6x13-ISO8859-13.bdf
6x13-ISO8859-15.bdf
6x13-KOI8-R.bdf

分别带有 XLFD
-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-2
-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-3
-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-4
-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-5
-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-7
-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-8
-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-9
-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-10
-misc-fixed-medium-r-normal--13-120-75-75-c-60-iso8859-13
-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

的别名(从这些标准字体到 Unicode 的转换主要由 Markus Kuhn 完成的。Markus 是个有品味的人,它令人惊讶的用 Perl 进行了转换处理。)

3.2. ClearlyU Unicode 字体家族
ClearlyU 字体家族提供了一组 12 pt、100 dpi 成比例的字体,并带有 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)包含特定语言需要的补充图元形状。对于一个字符有多于一个通常用做替代形状的情况(例如 Urdu heh),以后将提供第二个备用图元字体。

PUA 字体包含对特定的渲染目的有用的额外的图元。

阿拉伯额外字体包含对那些不能把所有可能的形状编码到 ISO 10646 中的字符是必须的图元。这些图元粗略的依据在 ISO 10646 标准中的次序来排序。

连体字(Ligature)字体包含对增进文本表示有用的各种手稿中的连体字。

(ClearlyU 家族由 Mark Leisher 设计。Mark 使用厂商名字 mutt,它使用相同名字来前导邮件,但没有更多说明。)

3.3. 标准可缩放字体
XFree86 包含所有与 X11R6 一起发布的可缩放字体。

3.3.1. 标准 Type 1 字体
IBM Courier 字体集合同于 Adobe 标准编码覆盖了 ISO 8859-1 和 ISO 8859-2。这些字体有 XLFD

-adobe-courier-medium-*-*--0-0-0-0-m-0-*-*

并驻留于字体文件
/usr/X11R6/lib/X11/fonts/Type1/cour*.pfa

Adobe Utopia 字体集合同于 Adobe 标准编码而只覆盖了 ISO 8859-1。这些字体有 XLFD

-adobe-utopia-*-*-normal--0-0-0-0-p-0-iso8859-1

并驻留于字体文件
/usr/X11R6/lib/X11/fonts/Type1/UT*.pfa

最后,XFree86 还附带了 Type 1 版本的 Bitstream Courier 和 Charter。这些字体有 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 包含 Speedo 版本的 Bitstream Courier 和 Charter 字体。要使用这些字体,你应该确保你的 X 服务器装载了‘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 Lucidux 家族
XFree86 包含 Lucidux 家族的 Type 1 字体。这个家族的组成有 Lucidux Serif 字体,带有 XLFD

-b&h-lucidux serif-medium-*-normal--*-*-*-*-p-*-*-*

Lucidux Sans,带有 XLFD
-b&h-lucidux sans-medium-*-normal--*-*-*-*-p-*-*-*

和 Lucidux Mono,带有 XLFD
-b&h-lucidux mono-medium-*-normal--*-*-*-*-m-*-*-*

这些字体中的每个目前都有罗马体和倾斜罗马变体(在将来的发行中将包含粗体变体) 并有 337 个图元覆盖了基本 ASCII Unicode 范围、拉丁1范围、和扩展拉丁范围。特别的,这些字体包含了 ISO 8859 部分 1、 2、3、4、9 和 15 所需要的所有图元。
Lucidux 字体最初由 Charles Bigelow 和 Kris Holmes 设计。Lucidux 字体包括有衬线(seriffed)、无衬线(sans serif)、和定宽(monospaced)式样,它们共享相同的主干(stem)重量、x 高度、大写高度、上升和下降。Lucidux 字体与 Lucida (R) 字体协调相同的垂直比例和重量。Lucidux 罗马字体的字符宽度的米制(metric)与许多窗口系统捆绑在一起的核心字体相匹配。

每个 PFA 文件都有一个许可条款在 PS 注释行中。出于方便这个许可条款还包含在文件‘COPYRIGHT.BH’中和许可文档中。

设计和字体轮廓由来自 Bigelow 和 Holmes Inc 的 Charles Bigelow 和 Kris Holmes 捐献。而线索由来自 Y&Y, Inc 的 Berthold Horn 和 Blenda Horn 捐献。详情请联系 [email protected][email protected] 或 Y&Y's web site。


--------------------------------------------------------------------------------



--------------------------------------------------------------------------------

4. 字体和国际化
可缩放字体后端 (Type 1, Speedo 和 TrueType)可以自动的把字体重新编码为在 fonts.dir 中 XLFD 里指定的编码,例如,fonts.dir 文件可以对 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 和 ISO 8859-2。
4.1. fontenc 层
三个可缩放字体后端(Type 1、Speedo 和 FreeType TrueType 后端)为字体重新编码使用了一个公用的 fontenc 层。这允许三个后端共享它们的编码的数据,并允许简单的新地域配置无关于字体类型。

请注意:X-TrueType (X-TT) 后端不使用 fontenc 层,而是使用它自己的方法进行字体重新编码。如果你只对 X-TT 感兴趣你可以跳过使用符号字体章节,因为中介(intervening)信息不适用于 X-TT。X-TT 自身在 X-TrueType 章节中有更详细的描述。

在 fontenc 层中,用名字(比如 iso8859-1)及映射的一个有序集合来定义编码,编码可能有多个别名(可替代的名字)。一个映射定义把编码映射成 fontenc 知道的目标编码之一的方式;目前,目标编码有 Unicode、Adobe 图元名字、和任意的 TrueType 的“cmap”。

一些编码被固化(hardwire)到 fontenc 内部,所以总是可以获得;这些硬编码不能被轻易的重定义。它们包括:

iso10646-1: Unicode;
iso8859-1: ISO 拉丁语-1 (西欧);
iso8859-2: ISO 拉丁语-2 (东欧);
iso8859-3: ISO 拉丁语-3 (南欧);
iso8859-4: ISO 拉丁语-4 (北欧);
iso8859-5: ISO 斯拉夫语;
iso8859-6: ISO 阿拉伯语;
iso8859-7: ISO 希腊语;
iso8859-8: ISO 希伯莱语;
iso8859-9: ISO Latin-5 (土尔其语);
iso8859-10: ISO Latin-6 (日耳曼语);
iso8859-15: ISO Latin-9、或 Latin-0 (修订的西欧语言);
koi8-r: KOI8 俄语;
koi8-u: KOI8 乌克兰语 (参见 RFC 2319);
koi8-ru: KOI8 俄语/乌克兰语;
koi8-uni: KOI8 “未定义” (俄语,乌克兰语,和白俄罗斯语);
koi8-e: KOI8 “欧洲”,ISO-IR-111 或 ECMA-斯拉夫;
microsoft-symbol 和 apple-roman: 它们只对 TrueType 符号字体有用。
通过定义编码文件可以增加补充的编码。在一个字体要求一个 fontenc 层不知道的字体编码的时候,后端检查字体在其中驻留的那个目录(目录不是必须有 fonts.dir!),查找叫‘encodings.dir’的一个文件。如果找到,在这个文件中检索要求的编码,并且读入有关的编码定义文件。调用‘mkfontdir’实用工具的时候,加上‘-e’选项并跟随着包含编码文件的一个目录的名字,可被用来自动的建立‘encodings.dir’文件。详情请参见 mkfontdir(1) 手册页。

XFree86 包括了用做公用编码的许多编码文件。写新的编码文件的信息请参见后面的编码目录文件格式和编码文件格式章节。

4.2. 关于 fontenc 特定后端的注解
4.2.1. Type 1
Type 1 后端首先查找有 PostScript 目标的映射。如果找到,则使用它。否则,查找有目标 Unicode 的映射,它由把代码映射成图元名字的一个内置表格构成。注意这个表只覆盖了由 Adobe 指派了名字的那部分 Unicode 代码点。

如果未找到 PostScript 或 Unicode 映射,后端缺省为 ISO 8859-1。

指定一个编码值为 adobe-fontspecific 将停用这个编码机制。这对于符号和不正确编码的字体是有用的(参见下面段落不良编码的字体)。

目前 Type 1 后端限制所有编码为 8-bit 代码。

4.2.2. Speedo
Speedo 查找有一个 Unicode 目标的映射,如果找到则使用它。否则,后端缺省为 ISO 8859-1。

Speedo 后端限制所有编码为 8-bit 代码。

4.2.3. FreeType TrueType 后端
TrueType 后端依次检索映射。忽略有 PostScript 目标的映射;针对在这个文件中的所有 cmap 来检查有一个 TrueType 或 Unicode 目标的映射。使用第一个适用的映射。

如果你写一个与 TrueType 后端一起使用的编码文件,你应该确保以性能的下降次序来提及这些映射。

4.3. 编码目录文件的格式
要以字体后端不知道的编码来使用一个字体,你需要在与字体文件所使用的相同目录中有一个‘encodings.dir’文件。‘encodings.dir’有与‘fonts.dir’类似的格式。它的第一行指定编码的数目,而每个后续的行都有两列,编码的名字,和编码文件的名字;它可以相对与当前目录,或者是绝对路径。每个编码名字应当适合与在编码文件中定义编码名字。例如, 

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’行中指定一个编码的名字。建立一个‘encodings.dir’条目是不够的。

如果你的平台支持它(很可能这样),编码文件可以用 compress 或 gzip 来压缩。

‘encoding.dir’文件最好由‘mkfontdir’工具来维护。更多的信息请参阅 mkfontdir(1) 手册页。

4.4. 编码文件的格式
编码文件是“自由格式”的,就是说一串白空格等价与一个单一的空格。以大小写不敏感方式分析关键字 关键字,这意味着‘size’、‘SIZE’、和‘SiZE’被分析成同一个关键字;另一方面,在图元名字中大小写是敏感的。

数字可以写为十进制如‘256’,或十六进制如‘0x100’,或八进制如‘0400’。

通过使用井号‘#’来介入注释。‘#’可以出现在一行的任意位置,而忽略在‘#’后面的所有字符,直到这一行的结束。

编码文件开始于编码名字的定义,接着可能是它的换用的名字(别名):

STARTENCODING mulearabic-0
ALIAS arabic-0
ALIAS something-else

编码名字和它的别名应当适合于用在 XLFD 字体名字中,所以绝对不能包含横杠‘-’。
编码文件接着随意声明编码的大小。对于线性编码(比如 ISO 8859-1),SIZE 行指定为最大代码加一:

SIZE 0x2B

对于矩阵编码,它指定两个数,第一个数是最后的行编号加一,第二个数是最高的列号加一。对于‘jisx0208.1990-0’(JIS X 0208(1990),双字节编码,高位清零),它将是:
SIZE 0x75 0x80

在矩阵编码的情况下,可以包含一个‘FIRSTINDEX’行来指定在编码中的最小图元索引。关键字‘FIRSTINDEX’跟随着两个整数,最小行编号和最小列编号:
FIRSTINDEX 0x20 0x20

在线性编码的情况下,‘FIRSTINDEX’行不是很有用。如果你处于某种原因而包含了它,它应该跟随一个单一整数。
注意在多数字体后端中包含‘FIRSTINDEX’行有停用缺省图元生成的副作用。所以除非绝对必须否则应当避免这个关键字。

在由‘SIZE’和‘FIRSTINDEX’定义的区域之外的编码被理解为未定义的。编码缺省为大小为256(0x100)的线性编码,这意味着你必须声明所有 16 编码的大小。

随后是一个或多个映射段。映射段开始于说明映射的目标的一个‘STARTMAPPING’行。目标可以是下列之一:

Unicode (ISO 10646):
STARTMAPPING unicode

一个给定的“cmap”:
STARTMAPPING cmap 3 1

PostScript 图元名字:
STARTMAPPING postscript

在映射段中的每一行把定义的编码映射成映射的目标。在 Unicode 或 TrueType 映射中,代码被映射成代码:
0x21 0x0660
0x22 0x0661
...

作为简写,可以一行来映射连续的代码范围。这一行由整数组成
<start> <end> <target>

它简写了下列范围的行
start   target

start+1 target+1
...
end     target+end-start
例如,行
0x2121 0x215F 0x8140

缩写了
0x2121 0x8140
0x2122 0x8141
...
0x215F 0x817E

假定未列出的代码为完全一致的映射(就是映射成相同的数)。为了屏弃这个缺省的映射,你可以通过使用‘UNDEFINE’行来指定一个范围的代码为未定义:
UNDEFINE 0x00 0x2A

或一个单一代码,
UNDEFINE 0x1234

PostScript 映射就不同了。在 PostScript 映射中的每一行都把一个代码映射成一个图元名字

0x41 A
0x42 B
...

而没有明显列出的代码是未定义的。
映射段结束于 ENDMAPPING 行

ENDMAPPING

在定义了所有映射之后,用 ENDENCODING 行结束文件
ENDENCODING

为了将来可以进一步扩展这个格式,以未知关键字开始的行,和有未知目标的映射段被静默的忽略。

 

4.5. 使用符号字体
应当使用 adobe-fontspecific 编码安装 Type 1 符号字体。

在理想世界中,使用 microsoft-symbol 和 apple-roman 编码之一来安装所有 TrueType 符号字体。但是许多符号字体不是这样标记的,应当使用 microsoft-cp1252 或对于老字体使用 microsoft-win3.1 来安装它们。

为了保证一致的结果(特别是在同一个字体的 Type 1 和 TrueType 版本之间),可以为给定字体定义一个特殊编码。对 ZapfDingbats 字体已经这样做了;参见文件 encodings/adobe-dingbats.enc 。

4.6. 对使用不良编码的字体的提示
一些文本字体被不正确的编码。不良编码有时出自设计,为了使一个异国文稿的字体表现得如同普通西方文本字体。这经常是设计者的懒惰和无能得结果;出于某种原因,多数人发现发明异质的图元名字要比遵从 Adobe 图元列表容易。

对这种字体有良种处理方式: 使用设计它所用于的编码,和建立一个特殊编码文件。

4.6.1. 使用带有设计者编码的字体
在 Type 1 字体的情况下,字体设计者可以指定缺省的编码;通过在 XLFD 名字中指定 ‘adobe-fontspecific’来要求这个编码。有时字体设计者省略了指定一个合理的缺省编码,此时你应该用‘adobe-standard’、‘iso8859-1’、‘microsoft-cp1252’、和‘microsoft-win3.1’来实验。(对于 Type 1 字体编码‘microsoft-symbol’没有意义)。

TrueType 字体没有缺省编码。但是,多数 TrueType 字体被设计用于 Microsoft 或 Apple 平台,所以‘microsoft-symbol’或‘microsoft-cp1252’、或‘microsoft-win3.1’、或‘apple-roman’应当能产生合理的结果。

4.6.2. 指定一个特别编码文件
总是可以定义一个编码文件来把在字体文件中图元排列为任何想要的次序。还有,参见‘encodings/adobe-dingbats.enc’文件来看这是如何做的。

4.6.3. 指定字体别名
通过上面的指导,你将发现自己有带有不平常的名字的一些字体 --- 带有编码如‘adobe-fontspecific’、‘microsoft-win3.1’等。要在标准应用中使用这些字体,可以把它们重新映射成适当的名字。

这通过写‘fonts.alias’文件来完成。这个文件的格式类似于‘fonts.dir’文件的格式,但它把 XLFD 名字映射成 XLFD 名字。一个‘fonts.alias’文件看起来如下:

1
"-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"

(两个 XLFD 名字在一个单一行上)。‘fonts.alias’文件的语法在 mkfontdir(1) 手册页中有精确描述。
--------------------------------------------------------------------------------



--------------------------------------------------------------------------------

5. 对 TrueType 支持的补充注解
这个版本的 XFree86 带有两个 TrueType 后端,FreeType (模块‘freetype’,以前叫做 xfsft)和 X-TrueType (模块‘xtt’)。这两个后端不相容: 一次只能使用其中一个。

要使用 FreeType 后端,请检查‘XF86Config’文件中的‘Module’段是否包含如下一行

Load "freetype"

要使用 X-TrueType 后端,在你的 XF86Config 文件中用下列一行替换装载 freetype 模块的那一行

Load "xtt"

两个 TrueType 后端都推延图元光栅化(rasterisation),直到第一次使用这个图元。为此,它们只为“平均宽度”字体属性提供一个近似值。

两个后端还对字符单元(character-cell)字体(所有图元都有相同的(metrics)米制的字体,或终端字体)提供优化。带有指定间隙(spacing)为‘c’的 XLFD 的字体,如

-misc-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1990-0

在米制计算期间不光栅化图元,而是信任这个字体是真正的字符单元字体。在有用的时候鼓励你使用这个优化,但要警告的是单空间(monospace)字体不都是字符单元字体。
5.1. FreeType TrueType 后端
FreeType 后端(以前的 xfsft)是基于 FreeType 库的后端(参见 FreeType web 站点) 并支持“fontenc”样式的国际化(参见章节 fontenc 层)。这个后端支持 TrueType 字体文件(‘*.ttf’)和 TrueType 集合(‘*.ttc’)。

要访问在 TrueType 集合文件中的一个字型,则必须在 fonts.dir 文件中这个文件名前面的两个冒号之间指定字型编号。例如,

:2:mincho.ttc -misc-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1990-0

引用在‘mincho.ttc’ TrueType 集合文件中的字型 2。
FreeType 后端使用 fontenc 层来支持字体重新编码;这在段落 fontenc 层 中做了描述,特别是段落对 fontenc 的 FreeType 特定注解。

5.2. X-TrueType TrueType 后端
‘X-TrueType’是基于 FreeType 库的另一个后端。X-TrueType 不使用‘fontenc’层来管理字体编码,而是使用它自己的编码数据库。但是 X-TrueType 包含了大量的编码,在 X-TrueType 中差不多提供了所有你需要的编码。

X-TrueType 对‘fonts.dir’语法扩充了一些叫做‘TTCap’的选项。‘TTCap’条目依从于如下一般语法

ption=value:

并应当在文件名之前指定。
最有用的 TTCap 选项是用来对 TTC 指定字型编号;它就是‘fn’TTCap 选项。例如,指定字体文件‘mincho.ttc’的字型 2 要使用:

:fn=2:mincho.ttc -misc-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1990-0

更多的关于 TTCap 语法和一般性的 X-TrueType 信息请参见 X-TrueType 主页。
--------------------------------------------------------------------------------



--------------------------------------------------------------------------------

6. 附录: 背景和术语
6.1. 字符和图元
一个计算机文本处理系统输入击键输出图元(glyph),图元是在纸张或计算机屏幕上被组合的小图片。击键和图元一般不一致: 例如,如果系统能生成连体字(ligature),则典型的两个击键 <f> 将对应一个单一的图元。类似的,系统形状阿拉伯图元如果在合理的方式下(in a reasonable manner),则多个不同的图元可以相应于一个单一击键。

通过中介的字符,从击键到图元的复杂转换规则通常被因素化为两个简单的转化。你可以把字符想象为存储的数据的基本单元,比如在你的文本编辑器的缓冲区中。而字符的定义是内在的特定于应用程序的,已经定义了许多标准化了的字符的总集(collection)。

一个编码的字符集是一个字符的集合,它与从叫做代码点(codepoint)的一个整数代码到字符的一个映射在一起。编码的字符集的例子包括 US-ASCII、ISO 8859-1、KOI8-R 和 JIS X 0208(1990)。

一个编码的字符集需要使用 8 位的整数来索引字符。许多早期的主机使用 6 位字符集,而对表意的书写系统则需要 16 位(或更多)字符集。

6.2. 字体文件, 字体, 和 XLFD
传统上,印刷者使用名词字型(typeface)和 fount。字型是特定的式样或设计,比如 Times Italic,而 fount 是给定大小的一个给定字型的铅铸的化身(incarnation)。

译注:fount - 英国人称一种尺寸字种包含大小写文字、数字、符号与该粗、斜等的整套字体。

数码字体存在于(come in)字体文件中。一个字体文件包含对生成给定字型的图元必须的所有信息,并且应用程序使用字体文件可以按任意次序访问图元信息。

数码字体可以由位图数据组成,在这种情况下它们被称为位图字体。它们也可以由对图元形状的数学描述组成,在着中情况下它们被称为可缩放字体。可缩放字体文件的公用格式有 Type 1 (有时错误的叫做 ATM 字体或 PostScript 字体)、Speedo 和 TrueType。

在数码字体中的图元数据需要以某种方式被索引。如何索引依赖于字体文件格式。在 Type 1 字体的情况下,图元用图元名字来标识。在 TrueType 字体的情况下,图元用对应于某个索引方案(通常是 Unicode --- 见后)的一个整数来索引。

X11 系统使用字体文件中的数据来生成字体实例,它是依据给定编码索引的给定大小的图元的总集。

X11 字体实例通常用叫做 X 逻辑字体描述(X Logical Font Description - XLFD)的表示法来指定。XLFD 开始于一个横杠‘-’,并由用横杠分隔的十四个字段组成,例如:

-adobe-courier-medium-r-normal--0-0-0-0-m-0-iso8859-1

有特殊意义的是最后两个字段‘iso8859-1’,它指定字体实例的编码。
译者按:余补充的 XLFD 的更详细的描述。

X11 字体实例还可以用短名字来指定。不象 XLFD,短名字没有结构而是给字体实例的一个方便的名字。 由两个短名字有特殊的意义,它们被服务器特殊处理,并且如果它们叫这些名字的字体实例不能打开则服务器将不启动。它们是‘fixed’,它指定在要求的字体不能打开的时候使用的替代(fallback)字体,和‘cursor’,它指定用做鼠标指针的图元集合。

短名字通常实现为给 XLFD 的别名;‘fixed’和‘cursor’别名定义在

/usr/X11R6/lib/X11/font/misc/fonts.alias

6.3. Unicode
Unicode (http://www.unicode.org) 是一个编码的字符集,它的目标是为所有的文稿(script),目前的和历史上的,唯一的标识所有的字符。尽管 Unicode 明显的不是被设计为一个图元编码方案,它通常被用做编码方案。

Unicode 是一个开放字符集,这意味着在任何时候都可以把代码点分配添加到 Unicode 中(但是一旦指定了一个分配则永不能变更)。故此,Unicode 字体将是稀疏的(sparse),并且只为 Unicode 的字符注册的一个子集定义了图元。

Unicode 标准与国际标准 ISO 10646 是平行定义的。在两个标准中的分配总是等同的,这个文档中使用的术语 Unicode 和 ISO 10646 是可互换的。

在用于 X11 的时候,Unicode 编码的字体应当把它的 XLFD 的最后两个字段设置为‘iso10646-1’。


--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

7. 参考
XFree86 附带了广泛的手册页格式的文档和排版文档。在安装字体之前,你确实应该读 mkfontdir(1) 手册页;其他有关的手册页包括 X(1)、Xserver(1)、xset(1)、xlsfonts(1) 和 showfont(1)。除此之外,你可能想阅读 Jim Flowers 写的 X 逻辑字体描述文档,这在文件‘xc/doc/xlfd.PS.Z’中提供。

不幸的,comp.fonts FAQ 不再被维护了,它包含了许多关于数码字体的信息。

xfsft 主页 已经被本文档替代,现已废弃;但你仍可从中找到一些有用的信息。Joerg Pommnitz 的 xfsft 主页 是‘ttmkfdir’实用工具的正规来源。

X-TrueType 的文档可获得自 X-TrueType 主页。

可从 O'Reilly 的 FTP 主页 获取许多东亚 CIDFont。

Unicode consortium 站点 可能有价值。但你可以从 Markus Kuhn 的 UTF-8 和 Unicode FAQ 找到你所需要的。

IANA RFC 文档,可在全世界的许多站点获得,经常提供关于字符集要点的有意义的信息;我最喜欢的是 RFC 373。


--------------------------------------------------------------------------------
发表于 2004-1-10 13:53:39 | 显示全部楼层
直接連結

http://www.chinalinuxpub.com/doc/xfree86/index.html
回复

使用道具 举报

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

本版积分规则

GMT+8, 2025-2-11 00:14 , Processed in 0.027949 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

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