XeTeX 如何排版以 unicode 输入的(数学)符号?

XeTeX 如何排版以 unicode 输入的(数学)符号?

我正在考虑转向 Xe(La)TeX,主要原因是它允许我在 LaTeX 代码中使用 unicode,从而使所述代码更易于阅读,尤其是数学代码。

但我对 XeTeX 如何根据我的输入排版符号感到困惑。我看到了三种可能性:

  1. Unicode 字符被激活并且 XeTeX 输出我们熟悉和信任的 TeX 符号。
  2. Unicode 字符通过管道(直接)传输到最终(pdf、ps、dvi)文档。
  3. 两者的结合。

XeTeX 的宣传点之一是可以直接访问系统 UTF-8 字体,我猜 (2) 与此有很大关系。

漂亮的排版

但 TeX 一直致力于美观的排版,并且已经付出了很多努力来使符号及其间距看起来更好。我们还能从 unicode 输出中获得相同的好处吗?(符号看起来一样吗?更好?还是更糟?)我相信有些符号不是直接来自字体,而是在 TeX 本身中精心制作的。

具体内容

有一些特定的数学结构在 TeX 中得到特殊处理,但也具有 unicode 符号。例如,对于\cap\bigcap,分别有 ∩ 和 ⋂。它们都表现得如此吗?那么 √ 呢?或者有实现这种东西的软件包吗?

大多数Unicode 数学符号在数学间距方面是否解释正确?(\mathbin,,,,,)\mathrel\mathop\mathopen\mathclose

从 unicode ⦃⦄ ⦅⦆ 派生出的数学分隔符是否可以按应有的方式垂直缩放?

组合变音符号处理得当吗?

可移植性

在不同系统上编译代码时输出会有所不同吗?我生成的 pdf/ps/dvi 在不同系统上查看时会有所不同吗?还是所有相关字体都会自动包含在内?

unicode-math

unicode-math最后,在这个故事中扮演什么角色?

答案1

XeTeX 引入了新的原语,例如\Umathcode(最高版本 0.9998 称为\XeTeXmathcode,为了与 LuaTeX 兼容而重命名),它是 Unicode 的类似物\mathcode

在传统的 TeX 中,什么意思\mathcode?如下声明

\mathcode`+="202B

告诉 TeX,+数学模式下的 a 应被视为二进制运算符号(最左边的字节"2),取自字体系列"0并插入"2B相应字体中。同样,也可以这样写

\Umathcode`∑="1 "1 "2211

甚至

\Umathcode`∑="1 "1 `∑

原语\Umathcode的语法如下

\Umathcode<Unicode point> = <math type> <family> <slot>

在 (可选) 之后=,应该给出三个数字,因为无法像 TeX 那样将信息打包成一个数字。实际上,信息仍然打包成一个数字(在本例中是十进制的 18883089,十六进制的"1202211),但从打包数字到显式类型系列槽的转换并不简单。

这可能伴随着类似的声明

\Umathchardef\sum="1 "1 "2211

因此输入$∑$$\sum$将得到相同的结果。

unicode-math包加载了一个巨大的符号列表,并执行与 类似的分配。 对应的数字会有所不同,因为它取决于许多方面,无法在简短的答案中涵盖。

实际上unicode-math做的远不止这些,因为它设置了一些东西,以便诸如\mathbf或之类的命令\mathrm能够给出所需的结果。

还有其他与传统原语相对应的原语,即\Umathchar,用于使用直接指定的字符,或\Udelimiter用于设置具有正常和大变体的分隔符,\Umathaccent最后\Uradical用于定义根符号。请参阅texdoc xetex这将打开 Will Robertson 和 Khaled Hosny 编写的“XeTeX 参考指南”。

答案2

Unicode 数学与字体中存在的 OpenType 表一起排版MATH;该表包含相当于\fontdimen;该表包含与传统 TeX 数学字体的 s 等效的数据;请参阅这篇TUGboat文章。因此间距与以前相同。这些字体包含各种大小的符号字形,字体会自动使用适当的字形。字体嵌入在 PDF 文件中。字形在文件中显示为 Unicode 字符。该unicode-math包支持使用传统的 TeX 控制序列来表示数学符号和构造,并提供一个用于加载 OpenType 数学字体的简单界面。

答案3

对于 (1) 你不需要 xetex;原则上\usepackage[utf8]{inputenc}允许 utf8 输入与经典 TeX 一起工作(但如果您希望它覆盖数学范围,可能需要比默认设置定义更多的命令)

不是(3),因为它大多不使用主动字符。

也不是真的(直接)(2)。

它的工作方式与传统 TeX 基本相同:在数学模式下,每个字符都有一个,\mathcode用于告诉 TeX 要使用哪种字体和插槽,以及符号是否是关系等。xetex(和 luatex)在概念上是相同的,只是数学代码表被扩大了,因此任何 unicode 代码点都可以有一个数学代码,而不仅仅是十六进制 FF 的值。因此映射不是“直通的”,而是不通过活动字符实现的。

然后,该软件包需要正确处理所有细节,例如映射传统命令,比如\mathbf通过在同一字体内切换字符范围而不是切换字体来工作,以及从 opentype 表而不是 tfm 文件中获取数学排版参数。

相关内容