LuaTeX .dvi 文件中如何引用非 Unicode 字形?

LuaTeX .dvi 文件中如何引用非 Unicode 字形?

Dvi 文件通过其 Unicode 编号引用字形。但是,文档通常包含一些未编码的字形,例如较大的数学符号。通过检查包含此类字形的 dvi 文件,我得出结论,这些字形由一些非 Unicode(私人使用区)字符代码引用。

我如何知道 LuaTeX 会为某个字形选择哪个字符代码,比如说,整数符号的显示版本?如果它们不同,同样的问题也适用于 XeTeX。

例子:

\documentclass{standalone}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{XITS}
\setmathfont{XITS Math}
\begin{document}
$\int\displaystyle\int$
\end{document}

当使用 LuaLaTeX 编译时,使用该--output-format=dvi选项,小积分被编码为 0x222B(如预期的那样),大积分被编码为 0x0F001C(有点令人费解)。

更新:

一些实验证实,积分符号的编码在不同字体中有所不同。例如,积分的显示版本在 Cambria Math 中为 0x0F05C2,在 Asana Math 中为 0x10FF99,在 STIX Math 中为 0x0F0314。

答案1

LuaTeX 使用一个非常简单的算法来选择 DVI 字符代码:在读取 OTF 文件时,它会检查字符是否分配了 Unicode 点。如果 Unicode 映射表中有一个条目,LuaTeX 将使用 Unicode 点。否则,它会填充从 0xF0000 开始的 Unicode 范围。第一个未映射的字符被分配到 0xF0000,第二个被分配到 0xF0001 等等。因此,只有您自己评估 OTF 字体的 Unicode 表才能预测 DVI 字符代码。特别是,代码和未映射字符的语义之间没有关系,即大整数符号可以根据映射表和各种字体文件中存在的字符获得不同的 DVI 代码。

另一方面,如果字符是用 XDV 命令XGlyphArray或设置的,XeTeX 只会使用 OTF 文件中字符的字形索引XGlyphString。字体中的每个字形都有一个唯一的内部值,与任何编码无关。编码本身由前面提到的编码表实现,例如,从 Unicode 或 ISO-8859-1 映射到字形索引。因此,XeTeX 会忽略字体文件中存在的编码并直接使用字形索引——更准确地说,是 FreeType 库提供的索引(可能会重新排列值)。

相关内容