假设你想表明某个量有一个精确的值,可能可以用无限多的数字来计算,通过在数值末尾添加“...”,就像
ε 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
我不知道这个问题的完美解决方案,但我提出了一种解决方法,如果您希望用您的数字进行解析,那么您必须忍受这种不便。
附言:不过我不太确定间距——它是否符合“专业”标准。如果有人能就此问题提供意见(只需编辑此答案,或发布您自己的单独答案),我会很高兴,例如,如果此解决方案在数字和单位之间引入了错误的间距。