如何使用 siunitx 在数字末尾添加点?

如何使用 siunitx 在数字末尾添加点?

假设你想表明某个量有一个精确的值,可能可以用无限多的数字来计算,通过在数值末尾添加“...”,就像

ε 0 = 8.854187817...×10 −12法/米

或者

ε 0 = 8.854187817 ... 皮法/米。

\documentclass{article}
\usepackage{siunitx}

\begin{document}
\SI{8.854187817{\ldots}}{\pico\farad\per\metre} 
\end{document}

产生错误

! siunitx error: "invalid-token-in-number"

一个可能的麻烦的解决方案是写

\num{8.854187817}\ldots\si{\pico\farad\per\metre} 

但这不适用于科学计数法中的数字。

有什么解决方法吗?

答案1

正如评论中所讨论的那样,siunitx软件包文档提供了一个用于解析的选项\dots,使用input-protect-tokens=\dots(参见表 14)。请在下面的代码中观察它的用法。

在这里我展示了如何使用它,如果你(1)在本地使用它(一次性使用),或者(2)在全球/范围环境中使用它。

请注意,您可以使用科学计数法或不使用科学计数法(以皮、毫、吉等表示)来使用此解决方案。

\documentclass{article}
\usepackage{siunitx}

\begin{document}
    \textbf{Explicit passing of options -- for local use}

    \(\varepsilon_0 = \SI[input-protect-tokens=\dots]{8.854187817\dots e-12}{\farad\per\metre}\) \par
    \(\varepsilon_0 = \SI[input-protect-tokens=\dots]{8.854187817\dots}{\pico\farad\per\metre}\)

    \medskip
    \textbf{Using SIsetup -- for global/scoped use}

    \sisetup{input-protect-tokens=\dots,scientific-notation=true}
    \(\varepsilon_0 = \SI{8.854187817\dots e-12}{\farad\per\metre}\) \par
    \(\varepsilon_0 = \SI{8.854187817\dots}{\pico\farad\per\metre}\) 

    \medskip
    \textbf{Breaking of }\texttt{scientific-notation=true} % pointed out by Steven in comments

    \SI{0.003\dots}{\farad} % Does not convert to scientific notation automatically
    v.s.
    \SI{3\dots e-3}{\farad} % Use this as a workaround for now..
\end{document}

输出


笔记

最后要说的是 Steven 的敏锐观察,这scientific-notation=true一点被“打破”了。我试图在我的代码和输出的最后一个示例中展示这一点。通常,如果将该选项设置为 true,则键入\SI{0.03}{}将自动产生结果3x10^-2。使用 with 时情况并非如此\dots。(当然,这不在您的原始问题中,所以我将把这个问题留作另一个问题来解决,也许。:-)

\dots我不知道这个问题的完美解决方案,但我提出了一种解决方法,如果您希望用您的数字进行解析,那么您必须忍受这种不便。

附言:不过我不太确定间距——它是否符合“专业”标准。如果有人能就此问题提供意见(只需编辑此答案,或发布您自己的单独答案),我会很高兴,例如,如果此解决方案在数字和单位之间引入了错误的间距。

答案2

先前接受的答案不再适用于当前版本siunitx(撰写本文时为 v. 3.1.1)。

当前工作解决方案,如中所述siunitx文档,如下所示:

\documentclass{article}
\usepackage{siunitx}
\usepackage{etoolbox} % Needed for \robustify

\begin{document}
\robustify\dots
\sisetup{input-digits = 0123456789\dots}
\qty{8.854187817\dots}{\pico\farad\per\metre} 
\end{document}

相关内容