如何使用 siunitx 包将 10k 写入 10000?

如何使用 siunitx 包将 10k 写入 10000?

在某些科学领域(例如计算机科学),没有单位的大数通常使用千前缀缩写。有没有办法使用包来实现这一点siunitx

例子:

After 21k iterations, the loop was terminated.

我试过:

\num{21\kilo}
\SI{21}{\kilo}

但是,两者都给出了错误。

谢谢。

答案1

(评论太长,因此作为答案发布)

当人们使用这样的表达方式时

I ran a 5k race last week.

或者

After 21k iterations, the loop was terminated.

他们的意图是绝不赋予术语5k21k任何形式的科学精确性和准确性。相反,其意图是非正式的和情境化的。在前一种情况下,它是“我上周参加了一场五公里赛跑”的简写;希望听众不会对未说明的长度参数产生任何疑问。在后一种情况下,它是“经过 21000 次迭代后,循环终止”的简写。

无论如何,试图引用包的繁重机制siunitx(特别是包\num\SI宏)来排版此类非正式表达方式似乎是一种误导。当然,如果必须拼写出第一句话中的简写,人们会写“我上周跑了五公里赛跑”或“我上周跑了五公里赛跑”——但当然不是“我\SI{5}{\kilo\meter}上周参加了一场比赛”。

我想人们可能会争论是否应该k在术语5k和中在数字和字母之间插入一个细空格21k。(我同意单词之间的空格似乎太多了。)我非常肯定,无论有没有细空格,都不会有人对这些术语的含义感到困惑。因为这些表达是非正式的简写,而且由于不太可能造成混淆,所以我会选择更简单的解决方案和忽略薄弱的空间。

答案2

\documentclass{article}
\usepackage{siunitx}
\begin{document}
After \SI{21}{\kilo{}} iterations, the loop was terminated.
\end{document}

21\,k但是请注意,结果与使用(...as\SI{10}{\meter}也等于)完全相同10\,m,这易于输入,并且在源文档中更具可读性。

siunitx经常使用,但它不是在 LaTeX 中输入单位的强制性方式,它只是一种在有帮助时才使用的工具。

答案3

一个可能的解决方案是将 k 定义为一个单位:

\documentclass{article}

\usepackage{siunitx}
\DeclareSIUnit\k{k}

\begin{document}
After \SI{21}{\k} iterations, the loop was terminated.

\end{document}

但是,这看起来有点奇怪,我不确定数字和 k 之间的间距是否正确。

编辑:由于这似乎是更好的选择,这里有一个替代方案,数字和 k 之间没有空格。我还添加了一个宏(感谢@Fran),以提高可读性:

\documentclass{article}

\usepackage{siunitx}
\DeclareSIUnit[number-unit-product = ]\k{k}
\def\n#1k{\SI{#1}{\k}}

\begin{document}
After \SI{10}{\k} iterations, the loop was terminated.

After \n10k iterations, the loop was terminated.
\end{document}

siunitx最终,将此功能作为命令的变体包含在内会很好\num。因此,我在 Github 上针对此功能请求打开了一个问题 (关联)。我们将看看效果如何。如果确实实施了,我将更新此答案。

相关内容