请考虑以下示例:
\documentclass{standalone}
\usepackage{unicode-math}
\setmathfont{TeX Gyre Termes Math}
\begin{document}
\(f\Bigl(\Bigr)\)
\end{document}
如果你用 编译它xelatex
,你会得到
但如果你用编译它lualatex
,你会得到一个更窄的
当然,结果不同,因此至少有一个引擎或 unicode-math 对 f 和左括号之间的间距有误。主观上, 的输出xelatex
比 的输出更令人愉快lualatex
,因此,我推测lualatex
(或仅由 lualatex 运行的 unicode-math 内的代码)是罪魁祸首。但是,我不知道“官方”规范应该如何,所以,一切都无从得知。
f
和之间的距离(
应该有多大才能读得最舒服?谁是罪魁祸首?(即,谁偏离了应有的方式?)
有什么方法可以修复罪魁祸首,或者至少可以或多或少自动地实现编译所用引擎的独立性?
弱相关:更改 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
回调来自动实现。