XeTeX 中的字体处理

XeTeX 中的字体处理

Knuth 最初的 Tex 实现使用 TFM 文件来使用字体信息进行排版。由于 XeTeX 通过fontspec包支持 TrueType 和 OpenType 字体,那么它如何使用这些类型的字体?它是否会在排版过程中动态生成 TFM 文件级信息?此外,TFM 格式是否足以表示使用 OpenType 或 TrueType 字体排版文档所需的所有必要信息?顺便问一句,如果 TFM 文件是动态生成的,是否意味着除非 Linux 和 Mac 上都有字体,否则我无法.dvi在 Linux 上编译文件并在 Mac 上看到它?

答案1

它是否会在排版过程中动态生成 TFM 文件级信息?

不,XeTeX 在排版过程中直接读取字体指标(在第三方库的支持下),不会为 XeTeX 所谓的原生字体生成“内部” TFM。

TFM 格式是否足以表示使用 OpenType 或 TrueType 字体排版文档所需的所有必要信息?

不,除了 TFM 文件所表示的字形数量限制(可以或多或少地消除,例如 Omega 的 OFM 文件)之外,OpenType 还提供了更高级的印刷功能,远远超出了 TFM 格式支持的连字机制。

…这是否意味着,除非 Linux 和 Mac 上都有字体,否则我无法在 Linux 上编译 .dvi 文件并在 Mac 上看到它?

确实如此,除非您在两个系统上完全相同的位置拥有完全相同的字体文件,否则 XeTeX 生成的 XDV(扩展 DVI)无法在另一个系统上处理。但是,XeTeX 的最终输出是可移植的 PDF 文件,而 XDV 文件被视为中间表示,仅仅是实现细节。还请注意,这对于常规 DVI 文件也是如此;如果您在两个系统上没有相同的度量文件和字体,则无法处理 DVI 文件,DVI 与设备无关但不可移植。

答案2

当你在 TeX 中加载字体时,使用原始命令

\font\foo=bar

所有高级宏(例如 LaTeX 的宏)最终都会归结为它,TeX 将读取文件bar.tfm并将其包含的信息存储在内存中。

XeTeX 中不需要 OpenType 和 TrueType 字体的 TFM 文件,因为必要的信息已经在字体表中,XeTeX 能够检查这些信息。

实际上,XeTeX 存储的度量信息比 TeX 中的普通字体要多得多,而 TeX 通常只有 7 个参数。

\font\foo="Linux Libertine O"

XeTeX 知道此字体的最大值。但是TFM 格式并没有硬性规定参数\fontdimen65最多为 7 个,字体可以有任意数量的参数(不过,对于文本字体来说,7 个是最小值)。\fontdimen

XeTeX 的输出格式是 XDV,这是 DVI 格式的扩展,预览器可用。无法使用 Xdvi 或其他 DVI 预览器预览 XDV 文件。实际上,XDV 文件xdvipdfmx在处理过程中被传递给 PDF 文件,其中包含在任何平台上读取所需的所有必要信息。

相关内容