考虑以下 MWE。它应该打印三个等式,并在等号后添加空格,以便等式的右边缘(单位)水平对齐。
% !TeX program = lualatex
\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{STIX2Text-Regular}
\setmathfont{STIX2Math}
\usepackage{mathtools}
\usepackage{siunitx}
\begin{document}
\footnotesize
\(X = \SI{4.8}{\henry}\)
\(X = \hphantom{.} \SI{10}{\henry}\)
\(X = \hphantom{0.} \SI{6}{\henry}\)
\end{document}
最后一个方程的对齐明显不正确,而第二个方程似乎正确。(不过,我只是目测了一下。没有进行任何精确测量。)
在创建这个 MWE 时,我尝试了一下,这似乎只发生在\footnotesize
、\SI
(如果我只输入数字,那就没问题)和unicode-math
(虽然我不太确定这个)。默认的 Latin Modern 字体也存在偏移,但使用 Stix2 字体更容易发现,这就是我在这里使用这些字体的原因。
造成这种情况的原因是什么?我该如何避免?
答案1
STIX Two Math 中的数字宽度不同\footnotesize
。为什么?询问 STIX。
\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
\usepackage{mathtools}
\usepackage{siunitx}
\begin{document}
\footnotesize
\(X = \SI{4.8}{\henry}\)
\(X = \hphantom{.} \SI{10}{\henry}\)
\(X = \hphantom{0.} \SI{6}{\henry}\)
\(X = \hphantom{1.} \SI{6}{\henry}\)
\sbox0{$1$}\the\wd0
\sbox0{1}\the\wd0
\sbox0{$0$}\the\wd0
\sbox0{0}\the\wd0
\end{document}
使用此代码,漂移非常小,但仍然很明显。为什么?
您应该知道,默认情况下siunitx
使用文本模式数字,因此您的幻影无法获得所需的宽度,因为它使用数学模式数字。
但是,句点取自数学字体。如果您使用
\footnotesize
\(X = \SI{4.8}{\henry}\)
\(X = \hphantom{.} \SI{10}{\henry}\)
\(X = \hphantom{\mbox{0}.} \SI{6}{\henry}\)
\(X = \hphantom{\mbox{1}.} \SI{6}{\henry}\)
你得到
为什么不使用对齐?
\footnotesize
\(\begin{alignedat}{2}
X &={} &\SI{4.8}{\henry}\\
X &={} &\SI{10}{\henry}\\
X &={} &\SI{6}{\henry}
\end{alignedat}\)
答案2
在所有情况下都将其更改为使用 0.6
\Si
使用文本模式
......\hbox(5.814+0.108)x11.475, direction TLT
.......\TU/STIXTwoText(1)/m/n/9 0
.......\TU/STIXTwoMath(1)/m/n/9 .
.......\TU/STIXTwoText(1)/m/n/9 6
但\hphantom
使用数学模式
.....\hbox(6.021+0.117)x7.785, direction TLT
......\TU/STIXTwoMath(1)/m/n/9 0
......\TU/STIXTwoMath(1)/m/n/9 .
正如你所见,宽度不同
\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
\makeatletter
\def\finph@nt{%
\setbox\tw@\null
\ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
\ifh@ \wd\tw@\wd\z@\fi
\leavevmode@ifvmode\box\z@}
\usepackage{siunitx}
\begin{document}
\footnotesize
\showoutput
|\(X = \SI{0.6}{\henry}\)|
|\(X = \hphantom{0.} \SI{6}{\henry}\)|
|$X=0.6\mathrm{H}$|
|$X=\hbox{$0.$}6\mathrm{H}$|
|$X=\hphantom{0.}6\mathrm{H}$|
\end{document}