考虑一下
\documentclass[a4paper]{article}
\usepackage[left=0cm,right=12cm]{geometry}
\usepackage{unicode-math}
\setmathfont{Libertinus Math}
\usepackage[grid]{eso-pic}
\begin{document}
Before
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
After
\end{document}
左边是 xelatex 的结果,右边是 lualatex 的结果:
测试使用 TL2018(更新的预测试)完成。在心理上将右图略微向上移动,使其与左图完美对齐。重点是 xetex 输出在垂直方向上分布更广。在现实生活中,这意味着文档在分页方面很容易有所不同。
评论中指出,由于 LuaTeX 扩展了连字算法,因此已经存在这种情况,而 XeTeX 仍坚持使用传统算法。
这次测试来自\underbrace 和 Libertinus Math 的问题
使用默认字体,没有差异。
对不起,编辑:也存在差异注释掉\setmainfont{Libertinus Math}
并仅保留unicode-math
。
\documentclass[a4paper]{article}
\usepackage[left=0cm,right=12cm]{geometry}
\usepackage{unicode-math}
\usepackage[grid]{eso-pic}
\begin{document}
Before
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
\[ \underbrace{AAA}_{B}\]
After
\end{document}
编辑问题标题以删除对 Libertinus Math 的引用。
使用 onlyfontspec
但 notunicode-math
输出是相同的。使用fontspec
and unicode-math
(或仅后者加载前者)即使没有额外的字体设置,输出也会有所不同。
例如使用时也存在同样的问题\setmathfont{TeX Gyre Pagella Math}
。
这不是一个问题,unicode-math
而是一个引擎“问题”,可以使用这个 Plain TeX 示例进行显示:
\nopagenumbers
\ifdefined\directlua
\input luaotfload.sty
\fi
% Load any Unicode math font (we don't need scriptscript here)
\font\mathfont="TeX Gyre Pagella Math:script=math" at 10pt
\textfont0=\mathfont
\font\mathfonts="TeX Gyre Pagella Math:script=math;+ssty=0" at 7pt
\scriptfont0=\mathfonts
% Define the relevant symbols
\Umathcodenum`A="1D434
\Umathcodenum`B="1D435
\def\underbrace#1{\mathop{\Umathaccent bottom 0 0 "23DF {#1}}}
$$ \hbox{Before} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \hbox{After} $$
\bye
左边是LuaTeX,右边是XeTeX:
答案1
这不是一个答案,而是一个太长而无法评论的反问句。
在没有 Unicode 数学字体的情况下,XeTeX 和 LuaTeX 都会模拟传统的 TeX 数学排版行为。我们可以利用这一点来并排比较有和没有 Unicode 数学字体的输出。
\nopagenumbers
\ifdefined\directlua
\input luaotfload.sty
Lua%
\else
Xe%
\fi
\TeX
\hbox{
\vbox{\hsize=50pt
$$ \hbox{Traditional} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \hbox{After} $$
}
\font\mathfont="Latin Modern Math:script=math" at 10pt
\textfont0=\mathfont
\font\mathfonts="Latin Modern Math:script=math;+ssty=0" at 7pt
\scriptfont0=\mathfonts
\Umathcodenum`A="1D434
\Umathcodenum`B="1D435
\def\underbrace#1{\mathop{\Umathaccent bottom 0 0 "23DF {#1}}}
\vbox{\hsize=50pt
$$ \hbox{Unicode} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \underbrace{AAA}_{B} $$
$$ \hbox{After} $$
}
}
\bye
在这里我们开始遇到一些严重的麻烦,因为这两个引擎都不符合传统的 TeX 输出。部分原因是度量标准略有不同,下括号重音的形状也截然不同。但与此同时这种差异使得我们无法说出哪个引擎是“正确的”。
此时唯一能做的就是要求两个引擎的开发人员检查他们的代码,看看是否有任何错误的缩放比例,但对我来说这似乎有点毫无意义,因为我们并不清楚我们在寻找什么。因为 XeTeX 有这样的历史破碎的 数学,我怀疑是他们的错误,但这纯粹是猜测,也可能是诬告。