SIrange 在文本和数学模式下的排版不同

SIrange 在文本和数学模式下的排版不同

我观察到在文本或数学模式下使用破折号排版时存在差异SIrange。知道为什么会发生这种情况吗?以下是 MWE:

\documentclass{article}
\usepackage{siunitx}
\sisetup{
    range-phrase= -}

\begin{document}
    \SIrange{e-12}{e-10}{\second}
    $\SIrange{e-12}{e-10}{\second}$
\end{document}

它看起来是这样的:

在此处输入图片描述

答案1

正如我在评论中所写的,LaTeX如果你在数学模式之内或之外,你可以使用命令来TeX决定采取不同的行为\if<>\else<>\fi;特别是使用条件形式:

\ifmmode<expression inside math>
\else
 <expression outside math>
\fi

因此,如果将此代码应用于您的 MWE:

\documentclass{article}
%
\usepackage{siunitx}
\sisetup{range-phrase=%
 \ifmmode\mathbin{-}
 \else
  \thinspace\textendash\thinspace
 \fi%
}
%
\begin{document}
%
\centering
\SIrange{e-12}{e-10}{\second}
\[
\SIrange{e-12}{e-10}{\second}
\]
%
\end{document}

结果是:

具有两个相同输出的 MWE 的结果


更新

还有另一种获得正确破折号的方法,正如 egreg 所建议的,通过考虑在数学模式中包含文本,替换\mathbin{-}为:

\sisetup{range-phrase=%
 \ifmmode\text{\,\textendash\,}
 \else
  \thinspace\textendash\thinspace
 \fi%
}
%

获取:

MWE 的结果有两个相同的输出,视觉上与之前的输出相同

答案2

范围命令(\numrange\SIrange)仅适用于文本模式:文档中对此进行了介绍。原因是,如果您从数学模式开始,则无法确保在所有情况下都能正确删除行末的空格,因此例如

$\SIrange{10}{20}$

如果在 处发生换行,则标准设置的间距会错误to。因此,代码不会尝试处理在数学模式下使用它的情况。我想我可以针对这种情况添加警告。

相关内容