lualatex:f\Bigl 内部空间太小(

lualatex:f\Bigl 内部空间太小(

请考虑以下示例:

\documentclass{standalone}
\usepackage{unicode-math}
\setmathfont{TeX Gyre Termes Math}
\begin{document}
\(f\Bigl(\Bigr)\)
\end{document}

如果你用 编译它xelatex,你会得到

f() 在 f 和左括号之间留有足够的空间

但如果你用编译它lualatex,你会得到一个更窄的

f() 中 f 和左括号之间几乎没有空格

当然,结果不同,因此至少有一个引擎或 unicode-math 对 f 和左括号之间的间距有误。主观上, 的输出xelatex比 的输出更令人愉快lualatex,因此,我推测lualatex(或仅由 lualatex 运行的 unicode-math 内的代码)是罪魁祸首。但是,我不知道“官方”规范应该如何,所以,一切都无从得知。

  1. f和之间的距离(应该有多大才能读得最舒服?

  2. 谁是罪魁祸首?(即,谁偏离了应有的方式?)

  3. 有什么方法可以修复罪魁祸首,或者至少可以或多或少自动地实现编译所用引擎的独立性?

弱相关:更改 LuaTeX 中数学符号的边界框。然而,Ulrike 在她的回答中说“你处于数学的末尾,而 luatex 不会在数学和文本之间的边界插入斜体校正。”相反,在这里,我们仍然在数学中。如果你插入\Uchar"200B

答案1

相关规范究竟是怎么说的?

斜体校正可用于下列情况:

  • 当一连串倾斜字符后跟一个直字符(例如操作符或分隔符)时,最后一个字形的斜体校正将添加到其前进宽度中。

OpenType MATH 表规范(强调我的)

现在 TeX 引擎必须决定如何将其转换为 TeX 概念。XeTeX 通常将\mathopen原子归类为“分隔符”,因此是“直字符”,但 LuaTeX 仅将 TeX 分隔符(\left\right等)归类为“分隔符”。

我倾向于同意 XeTeX 的观点。

为了获得一致的行为,您可以通过明确添加斜体更正\/,因此在您的示例中:

\documentclass{standalone}
\usepackage{unicode-math,ifluatex}
\setmathfont{TeX Gyre Termes Math}
\ifluatex
  \mathitalicsmode=1
\fi
\begin{document}
\(f\/\Bigl(\Bigr)\)
\end{document}

这也可以使用mlist_to_hlist回调来自动实现。

相关内容