了解不同的 TeX 引擎如何处理字体

了解不同的 TeX 引擎如何处理字体

我对 TeX 如何处理字体知之甚少,我正在尝试了解更多。我知道 LaTeX 中存在像 fontspec 这样的辅助包,但我主要感兴趣的是直接使用和理解 \font 命令与不同的主要 TeX 引擎(pdfTeX、XeTeX 和 luaTeX)。

首先,我想知道可以使用哪种字体(openType、truetype 等等),以及每种引擎推荐使用哪种字体。其次,如果能知道哪些文件与字体相关联(如 tfm 文件、vf 文件、map 文件等等),这些文件的用途是什么,以及在哪里可以找到这些文件,那就太好了。密切相关的问题是如何安装字体,以便引擎可以找到它们(如果我没记错的话,XeTeX 查看的位置与其他位置不同)。最后一点,如果能理解 \font 命令的语法,那就太好了(什么时候必须输入整个文件名?什么时候只使用字体名称就可以了?什么时候需要在名称周围加上“[]”?什么时候以及如何从定义字体系列的文件中访问特定字体(如小型大写字母)?)。

很抱歉这个问题太长了。当然,它包含了一些在其他地方已经部分回答过的问题,但它们通常涉及特定的引擎/字体类型,而我更多的是想了解一下不同的可能性,以克服我的困惑。

答案1

由于 OP 似乎主要关心如何让 TeX 引擎找到字体文件。我将把这个放在最上面。对于使用kpathsea库的 TeX 发行版,只需查看font/以下命令列出的路径中的目录,以获取 tfm、vf、编码文件和字体映射,这些是传统 TeX 使用的字体文件。

kpsewhich --expand-path="$TEXMF"

OSFONTDIRtexmf.cnf如果您想让 XeTeX/LuaTeX/DVIPDFMx 扫描这些位置以查找 OTF/TTF 文件,则应该在 shell 环境变量中定义或设置为该变量。


“传统” TeX 仅使用 TFM 文件,该文件仅包含字体尺寸而不是轮廓。这些在本书的 4.3 字体信息中列出TeX 按主题分类

然后发出一个 DVI 文件,相应的驱动程序(PostScript 的 dvips 或 PDF 的 DVIPDFMx)根据updmapTeXLive 分发版中命令维护的映射文件选择 PK(由 MetaFont 生成的位图字体)、PostScript Type1 字体、TrueType 或 OpenType。映射文件指定了 TFM 文件、编码文件和实际包含轮廓(如 TTF 或 Type1)的文件之间的关系。(虚拟字体使这个过程更加复杂,但原理是一样的,度量、编码和轮廓关联在一起,因此驱动程序可以决定使用哪个字形)。编码文件将 TFM 文件的 256 个不同代码位置链接到轮廓文件中的实际字形,它是 PostScript 的一个子集,专为 Type1 字体设计,每个驱动程序都有略微不同的解释方法来适应它们支持的不同字体格式,例如,pdfTeX 有自己的方法来映射名称,就像映射uniXXXX到 TTF 中的 unicode 代码点一样。

pdfTeX 遵循类似的程序,但它可以自行处理 Type1 和 TTF 来生成 PDF,而无需外部 DVI 驱动程序,并且由于 OpenType 是 TrueType 格式的扩展,pdfTeX 可以加载没有太多花哨表格的 OTF 文件。

pTeX 打破了字体 256 个代码数的限制,并根据汉字具有相同维度这一事实开发了自己的字体度量格式,以支持日文排版并理解 JIS 编码。upTeX 可以自动将 unicode 与 TTF/OTF 字体中的代码点关联起来,因此可以用于 CJK,并且某些喜欢垂直排版的中国用户会选择这样做。

dvips、DVIPDFMx、pdfTeX 可以共享同一套字体编码文件,但它们都有自己的怪癖。dvips 只能理解 PostScript 字体(Type1 或 Type3,也用于嵌入 PK 字体)。pdfTeX 理解 Type1 和 TTF,但由于它对 TTF 的支持有限,并且处理非标准代码方案的字体时会遇到麻烦,因此有时将 TTF 文件转换为 Type1 会更容易。DVIPDFMx 理解多种格式,并支持 OTF,在我看来,如果您想保留 TeX 的“传统”字体管理方法(主要是为了利用虚拟字体),它是其中最好的,如果您使用 upTeX,它是唯一的选择。

XeTeX、LuaTeX 与 TFM+Type1 方法兼容,因为最广泛使用的 Computer Modern 字体矢量化版本仍然是 Type1(事实上它们结合了大部分 pdfTeX 功能),但它们也理解 OTF(因此也理解 TTF),可以直接加载字体尺寸而无需 TFM,而且它们使用 unicode,因此它们也不需要编码文件来使用现代字体。它们可以直接利用 OpenType 功能(例如小型大写字母)打开和关闭。它们各自的\font命令记录在其手册中,您可以在对 vanilla plainTeX 如何处理字体有基本了解后查看它们(可以在 TeXbook 或 TeX by Topic 中查看)。

相关内容