编译文件
\documentclass{article}
\usepackage{unicode-math}
\setmathfont[
Extension=.otf,
range={\smallblacktriangleright},
BoldFont = *bold
]{xits-math}
\begin{document}
\[\vphantom{\smallblacktriangleright}^a\smallblacktriangleright^a\]
\end{document}
在 lualatex 下,会在相同高度生成两个“a”的副本(这是我所期望的),但在 xelatex 下会降低第一个“a”(我认为这是错误的):
关于使用 xelatex 编译时如何将第一个“a”放在正确的高度,有什么提示吗?
答案1
答案2
我认为其中存在几个错误。
首先,\vphantom{something}^a
在 TeX 中执行 应该与说 完全相同{}^a
,因为\vphantom
永远不可能成为数学原子的核心。因此,当 TeX 扫描 时^
,它会添加一个空子公式作为应该上标的数学原子的核心。
我将使用 来简化设置,{>}
而\smallblacktriangleright
不是与此无关的内容。下面是一个例子,首先使用 legacy 进行编译pdflatex
,然后使用 LuaLaTeX 进行编译,最后使用 XeLaTeX 进行编译。
表示\hrule
方框的顶部,而首字母x
表示基线。底部的分数将在后面解释。
示例代码
\documentclass{article}
\usepackage{ifxetex,ifluatex}
\ifx\ifxetex\ifluatex
\else
\usepackage{unicode-math}
\setmathfont{latinmodern-math.otf}
\fi
\begin{document}
\hrule height 0.1pt
x\(\displaystyle{}^a{>}^a\)
\hrule height 0.1pt
x\(\displaystyle\vphantom{>}^a{>}^a\)
\hrule height 0.1pt
x\(\displaystyle{\vphantom{>}}^a{>}^a\)
\hrule height 0.1pt
x\(\displaystyle{}^a{\sum}^a\)
\hrule height 0.1pt
x\(\displaystyle\vphantom{{\sum}}^a{\sum}^a\)
\hrule height 0.1pt
x\(\displaystyle{\vphantom{{\sum}}}^a{\sum}^a\)
\hrule height 0.1pt
\(\displaystyle\frac{\scriptstyle a}{\scriptstyle b}\frac{a}{b}\)
\end{document}
输出pdflatex
可以清楚地看到,使用{}
或时,左上标的位置没有区别\vphantom{>}
。第三行也没有区别,{\vphantom{>}}
是接收上标的数学原子的原子核。
\sum
类似地,当使用 代替时,前两行没有区别>
,但区别出现在第三行。
使用 LuaLaTeX 输出
这和以前本质上是一样的。
使用 XeLaTeX 输出
出现了一些差异。前三行彼此不同。对于第一行和第三行,这可能与 XeTeX 如何处理来自 OpenType 字体的信息有关,以便将其转换为适当的参数,\fontdimen
并且应该进行修复以匹配旧版排版。
第二行明显是错的。似乎当\vphantom
涉及到涉及时\mathchoice
,用于将上标设置为添加的空核的尺寸是相对于scriptscriptstyle字体的。
这可能与 XeTeX 的另一个已知错误有关,该错误会显示分数。如果比较前两幅图中的分数,分数线处于同一水平;在 XeLaTeX 输出中,带有脚本样式分子和分母的分数的分数线较低且较粗。
这种联系似乎很有可能,因为分数和\mathchoice
(以其为\vphantom
基础构建的)使用非常相似的机制。
解决方案?
没有一个可以像人们希望的那样被视为普遍的。使用适当的
{\vphantom{?}}^a
其中?
是某个符号,其高度使得上标的高度与所需的高度相匹配。