\hphantom 与 \footnotesize、siunitx 和 unicode-math

\hphantom 与 \footnotesize、siunitx 和 unicode-math

考虑以下 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 输出

最后一个方程的对齐明显不正确,而第二个方程似乎正确。(不过,我只是目测了一下。没有进行任何精确测量。)

在创建这个 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}

相关内容