我试图更好地了解如何处理数学字体,特别是 OpenType 数学字体如何用更少的文件完成与 type1 字体相同的工作。我的参考引擎是luatex
(版本beta-0.80.0 (TeX Live 2015) (rev 5238)
)。
因此,请考虑以下文件及其输出:
\documentclass[varwidth]{standalone}
\usepackage{newunicodechar}
\newunicodechar{∫}{\int}
\usepackage{lmodern}
\begin{document}
$\int ∫$
\begin{equation}
\int ∫
\end{equation}
\end{document}
和
\documentclass[varwidth]{standalone}
\usepackage{unicode-math}
\setmathfont{Latin Modern Math}
\begin{document}
$\int ∫$
\begin{equation}
\int ∫
\end{equation}
\end{document}
我想了解在上述八种情况下(type1 和 OpenType,以及输入、内联和 displaystyle 数学), \int
unicode 输入∫
最终如何在输出文件中呈现为 ∫。有人能详细解释一下吗?.pdf
\int
∫
边注:注意间距的差异。为什么?
答案1
在第一种情况下(8 位引擎),设置
\newunicodechar{∫}{\int}
使用活动字符使多字节序列∫
扩展为控制序列\int
。因此,这很重要。快速\show
显示\int
扩展为\intop\nolimits
并且\intop
定义为(\mathchardef
)\mathchar"1352
。然后,这就是 TeX 在宏层之外向前推进的“原始”指令。正如您可以在TeXbook,\mathchar
此处定义为“大运算符”(第 1 类),字形取自第 3 族,位于该字体中的“52 位置。处理字形大小、间距、ETC。,在 TeX 从文件加载字体度量时被读取.tfm
。(TeX 本身实际上并不使用字形,它由驱动程序插入到输出中。)
在 Unicode 情况下(带有unicode-math
),\int
是\let
到∫
,它本身是数学活动的并扩展为\intop\nolimits
(再次)。现在\intop
被定义为 Unicode 数学字符(\Umathchar"1"0"222B
)。再次,这是一个大运算符,这里取自字体 0,字形位置为“222B”。与传统情况不同,Unicode 数学字体是“自包含的”(所需的字体尺寸是文件.otf
本身的一部分),并且没有使用特定字体编号的特殊要求:这就是为什么我们可以在此处使用字体 0 或任何其他字体作为字形的原因。一旦获得,在我们到达 时,\Umathchar
宏级别的参与结束,引擎将根据文件中的数据处理字形的大小和定位.otf
。
使用的“大运算符”字符的大小由当前样式决定:\displaystyle
,,\textstyle
ETC。在传统情况下,使用设置的字形是(内联公式)\mathchar
中使用的“正确”大小。然后,文件将指定要在中使用的“后继”字形,并将在显示方程中使用。没有“小”字形可自动选择,因此下标将显得“太大”。在 Unicode 情况下,适用相同的样式概念,但现在我们只有一个字形槽。这将由字体整形器使用字体()中的信息进行缩放(传统 TeX 根本不使用字体整形器)。由于这可以双向缩放,因此如果在下标中使用,将出现“较小” 。\textstyle
.tfm
\displaystyle
\int
.otf
\int
就字体槽的含义而言,经典的 TeX 字体就是如此:不要求任何特定槽具有任何特定含义。事实上,由于每个数学字体只包含 128 个槽,因此您需要了解字体文件的语义才能确定字形的含义/外观。相比之下,Unicode 字体对每个位置都有一组明确定义的含义。因此,任何格式正确的 Unicode 数学字体在位置“222B”处都会有整数符号。事实上,人们可以检查UnicodeData.txt
以找出 Unicode 中所有当前分配的槽的逻辑含义。
(间距差异可能是由于字体尺寸不同或引擎问题:Unicode 数学领域仍处于开发阶段。)