使用 luatex 中的 type1 和 OpenType 数学字体比较 .tex 文件中 \int 或 ∫ 的路径与 .pdf 文件中 ∫ 的路径

使用 luatex 中的 type1 和 OpenType 数学字体比较 .tex 文件中 \int 或 ∫ 的路径与 .pdf 文件中 ∫ 的路径

我试图更好地了解如何处理数学字体,特别是 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 数学), \intunicode 输入最终如何在输出文件中呈现为 ∫。有人能详细解释一下吗?.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,,\textstyleETC。在传统情况下,使用设置的字形是(内联公式)\mathchar中使用的“正确”大小。然后,文件将指定要在中使用的“后继”字形,并将在显示方程中使用。没有“小”字形可自动选择,因此下标将显得“太大”。在 Unicode 情况下,适用相同的样式概念,但现在我们只有一个字形槽。这将由字体整形器使用字体()中的信息进行缩放(传统 TeX 根本不使用字体整形器)。由于这可以双向缩放,因此如果在下标中使用,将出现“较小” 。\textstyle.tfm\displaystyle\int.otf\int

就字体槽的含义而言,经典的 TeX 字体就是如此:不要求任何特定槽具有任何特定含义。事实上,由于每个数学字体只包含 128 个槽,因此您需要了解字体文件的语义才能确定字形的含义/外观。相比之下,Unicode 字体对每个位置都有一组明确定义的含义。因此,任何格式正确的 Unicode 数学字体在位置“222B”处都会有整数符号。事实上,人们可以检查UnicodeData.txt以找出 Unicode 中所有当前分配的槽的逻辑含义。

(间距差异可能是由于字体尺寸不同或引擎问题:Unicode 数学领域仍处于开发阶段。)

相关内容