LuaTeX
我在使用和包装时遇到了一些困难 unicode-math
。下面是 MWE,
\documentclass[12pt]{article}
\usepackage[math-style=ISO]{unicode-math}
\begin{document}
\[
f(T), f\left( T \right),
\int_{a}^{b} f\left( x \right) d x, \frac{1}{T},
\]
\mathitalicsmode=1
\[
f(T), f\left( T \right),
\int_{a}^{b} f\left( x \right) d x, \frac{1}{T},
\]
\mathitalicsmode=2
\[
f(T), f\left( T \right),
\int_{a}^{b} f\left( x \right) d x, \frac{1}{T},
\]
\end{document}
以下是其生成的文档的屏幕截图,
我们在这里可以看到几个问题,
- 收盘前间距不正确
\right)
。 - 收盘前间距不正确
)
。 - 分数线太短。
- 最后一个逗号太近。
- 积分中的极限间距不正确。
默认设置有问题1,3,4
,而\mathitalicsmode=1
有问题3,4
,\mathitalicsmode=2
有问题2,5
。
这是没有包的屏幕截图unicode-math
,一切看起来很完美。
似乎与 的斜体更正有关LuaTeX
。最近有几场讨论建议进行更改,\mathitalicsmode
但我们发现这会带来新问题,不太清楚该如何进行。
所有文档均使用 最新软件包制作MacTeX
。
答案1
简而言之:到目前为止,似乎还没有好的方法来使用 Opentype Math 字体解决 LuaLaTeX 中的问题。
继续阅读:
您看到的问题本质上是传统 TeX 字体和 Opentype 数学字体对斜体校正的处理不同,并且转换的某些字体实际上并未遵循新的(模糊的)标准(本质上是由 Cambria 设置的)。如果您不加载unicode-math
,您将获得旧的 type1 字体,这就是您得到预期结果的原因。让我首先展示使用 Cambria 设置的示例的结果:
在这里,我想说第一个例子看起来不错(除了f
和 之间的空格(
,但可以通过不使用 来避免\left
)。我想说,原因是 Cambria 是“模型 Opentype 数学字体”,这是微软在制定相当模糊的规范的同时制作的字体,并且 luatex 已适应它(还有什么?)。
看着规范我们发现
斜体校正可用于下列情况:
- 当一连串倾斜字符后跟一个直字符(例如操作符或分隔符)时,最后一个字形的斜体校正将添加到其前进宽度中。
- 在 N 元运算符(例如积分符号)上定位限值时,上限的水平位置向右移动斜体校正量的 1/2,而下限的位置向左移动相同的距离。
- 在定位上标和下标时,它们的默认水平位置也会根据前一个字形的斜体校正量而不同。
拉丁现代数学(屏幕截图中使用的字体)是从传统的计算机现代数学字体转换而来的,因此它也继承了其中的一些行为(有人可能会说它并没有真正变成真正的 Opentype 数学字体,不管这意味着什么)。这意味着人们会看到类似的问题出现,即使有快速修复(如\mathitalicsmode2
2022 年 4 月添加)来在某种情况下解决一个问题,但发生的情况是,问题只是被推到了其他地方/结构上。
我认为,要最终解决这个问题,需要做的事情(向维护者提出挑战unicode-math
)是使用类似于 ConTeXt 和 luametatex 中的模型,其中通过改变字形宽度和添加角字距来处理斜体校正。这似乎是一个适用于大多数字体的模型。
您的示例(适用于 ConTeXt)如下所示:
如果你好奇的话,用于生成该代码的代码是:
\usebodyfont[modern]
\usebodyfont[cambria]
\setupbodyfont[modern]
\starttext
\startbuffer
\startformula
f(T), f\left( T \right),
\int_{a}^{b} f\left( x \right) \dd x, \frac{1}{T},
\stopformula
\stopbuffer
\getbuffer
\switchtobodyfont[cambria]
\getbuffer
\stoptext
答案2
您可以通过在数学列表末尾添加零宽度字符来鼓励 luatex 添加斜体校正,这并不完美,但比斜体模式参数提供了更多的控制。请参阅此处的尝试 4。
\documentclass[12pt]{article}
\usepackage[math-style=ISO]{unicode-math}
\begin{document}
\[1+
f(T), f\left( T \right),
\int_{a}^{b} f\left( x \right) d x, \frac{1}{T},
\]
\mathitalicsmode=1
\[2+
f(T), f\left( T \right),
\int_{a}^{b} f\left( x \right) d x, \frac{1}{T},
\]
\mathitalicsmode=2
\[3+
f(T), f\left( T \right),
\int_{a}^{b} f\left( x \right) d x, \frac{1}{T},
\]
\mathitalicsmode=0
\let\oldright\right
\protected\def\right{^^^^200b\oldright}
\let\oldfrac\frac
\protected\def\frac#1#2{\oldfrac{#1^^^^200b}{#2^^^^200b}}
\[4+
f(T), f\left( T \right),
\int_{a}^{b} f\left( x \right) d x, \frac{1}{T},
\]
\end{document}