输出字体编码在 XeLaTeX/LuaLaTeX 中如何工作?

输出字体编码在 XeLaTeX/LuaLaTeX 中如何工作?

LaTeX 伴侣LICR(Addison-Wesley 2004)Mittlebach 和 Gossens 的专门第 7.11.4 节用于讨论输出编码:从LaTeX 引擎内部字符和符号的内部表示到字体文件中可用的字形或字形组合的映射。

自本书出版以来,新一代 LaTeX 引擎xetexluatex已成为焦点。与旧引擎不同,借助该软件包,新引擎可以轻松fontspec使用计算机上安装的任何字体。此外,与fontencLaTeX 伴侣作为输出编码机制的基石,fontspec不需要指定编码(例如)OT1T1

与传统引擎不同,新引擎可以读取 UTF-8 编码的输入文件,这使得指定输入编码是不必要的,据我所知,引擎内部输入的内部表示并没有改变,但可用字体的数量却急剧增加。因此,指定一个输出编码对于新引擎来说仍然像它对于传统引擎一样重要(现在也是如此)。

LICR在新引擎中,输出编码和字形映射的过程是如何进行的?

答案1

在许多方面,XeTeX 和 LuaTeX 中的字体编码与 pdfTeX 中的相同,ETC。加载字体后,必须知道字形如何编码,以便将输入映射到正确的输出。

大的不同之处在于 XeTeX 和 LuaTeX 都可以加载 OpenType 系统字体(.otf文件)。与“传统”的 TeX 字体不同,后者有多种编码,每种字体最多有 256 个可用插槽,而 OpenType 字体则以 Unicode 布局。由于这两个引擎也使用 Unicode 作为其标准输入编码,这意味着从输入到输出有一个直接映射,不需要任何操作。

如果希望在 XeTeX 或 LuaTeX 中使用非 Unicode 字体,则需要采用与 pdfTeX 相同的方法:选择正确的编码并设置适当的机制。对于 LaTeX,这意味着使用fontenc。当然,可以.tfm使用 XeTeX 或 LuaTeX 加载“经典”字体并显示“预期”字形。


然而,也有一些注意事项。关键的一点是连字模式是基于字体编码的,而对于“经典”的 TeX 引擎包括 XeTeX只能在制作格式时读取。这意味着在制作格式时,需要了解将要使用的字体编码。由于 XeTeX 是一个 Unicode 引擎,它会以 Unicode 编码加载连字模式。这需要使用的字体也是 Unicode 编码的如果连字符对于所有语言来说都是正确的。这影响的代码点数量很少(主要是 Unicode 和 T1 重叠),但这是个问题。出于这个原因,LaTeX 团队最近将 XeTeX(和 LuaTeX)中的默认字体编码从 OT1 更改为 Unicode:这可能会让那些粗心大意的人尝试低级字体操作。

值得注意的是,LuaTeX 与 XeTeX 略有不同,因为它可以在运行时加载连字模式,并且允许对输入进行重新编码。因此,LuaTeX 在某些方面比 XeTeX 更能处理非 Unicode 输入。然而,LuaTeX 开发也非常注重纯 Unicode 路径,因此,我对使用 LuaTeX 大量使用传统 TeX 字体创建任何新文档持谨慎态度。

答案2

这是我从评论中的讨论中得到的结果(感谢 Ulrike Fischer、cfr 和 Joseph Wright,但任何误解/歪曲都是我的错)。

fontspec包旨在与 unicode 字体一起使用。对于其他字体,请使用fontenc,就像使用 一样pdflatex

如何判断字体是否为 unicode?如果是Open Type,则为 unicode。文件扩展名.otf.otc表示OpenType字体。.ttf.ttc扩展名也可以表示OpenType字体,但它们也可以表示常规(非OpenTypeTrueType字体,因此买者自负

相关内容