更新:
siunitx
现在已更新所请求的功能/错误修复,并可在 Tex Live 中使用,而且运行良好。
再次提出这个问题的原因
上次收到的答复让我感觉被误解了,我知道我可能没有表达清楚我的意思。我会再次尝试解释。
接受答案的要求,可获得赏金
我将接受能够显示以下任一类型答案的答案:
- 我的输入是错误的,给出一些不同的命令将得到我希望的结果。
- 我对数学的理解是错误的。我期望的结果完全错误,请说明原因。
siunitx
有一个错误。我应该报告吗?有快速修复方法吗?- 自定义代码给了我期望的结果。见下文
siunitx
就是不这样做?
问题本身:
Siunitx
可以将指数转换为前缀,并且对于许多输入来说,这都非常好。但是,当使用 给出\si
-commands时cubed
,squared
则无法正常工作。我的例子现在应该可以清楚地说明这一点。我可能会补充说,这种情况也会发生在cubic
和squared
中,我当然知道这exponent-to-prefix
可能是一个新功能,并且创建这样的包可能需要大量工作。
Siunitx
就是不这样做?
正如一些答案和评论中提到的,siunitx
并不是要这样做。好吧,我认为这是误导性的,我认为siunitx
可以从这个功能中受益匪浅。它将使自动排版变得容易得多。我编写了一些脚本,它接受一些计算的输入,并为这些输入提供清晰易读的排版。这适用于所有数字,但不适用于提到的cubed
, squared
-单位。对于所有这些,我需要手动逐一编辑。现在,如果社区都同意这个功能应该不是进入siunitx
,那么我想请求针对此问题的定制解决方案。
\documentclass{article}
\usepackage{siunitx}
\sisetup
{
exponent-to-prefix = true ,
round-mode = places ,
round-precision = 2 ,
scientific-notation = engineering,
zero-decimal-to-integer = false,
}
\begin{document}
\SI{0.01}{\metre}
\SI{0,0001}{\metre}
\SI{0,0001}{\metre\squared} (should print {\SI{100}{\milli\metre\squared}})
\SI{0,0001}{\metre\cubed} (should print {\SI{100}{\centi\metre\squared}})
\SI{5000}{\deci\metre\squared} (should print {\SI{50}{\metre\squared}})
\end{document}
另外,看看这些Wolfram Alpha(1)和Wolfram Alpha(2):
答案1
指数到前缀的转换相当“简单”,适用于易于处理的情况。最初,这意味着单位幂的行为是未定义的。但是,扩展转换代码以适应这种情况很简单
\SI{0.001}{\metre\squared}
或类似内容。因此,这已完成并将出现在 v2.6o 及更高版本中(已发送至 CTAN 2016-01-05)。
答案2
siunitx
仅提供\squared
符号宏,而不是计算。因此 0.0001 米(正确)转换为 100 微米,并添加方形符号,结果为 100 μm²。参见
\documentclass[fleqn]{article}
\usepackage[per-mode=fraction]{siunitx} % also loads xparse and expl3
\begin{document}
\SI{5}{\metre\squared}
\end{document}
其面积为 5 平方米(而不是 25 平方米)。
答案3
如果您需要执行计算(例如,对数字进行平方)并将其以格式化的方式打印出来,则可以使用 LuaLaTeX 来实现您的目的。(结果应该是10 nm
,对吗?
% !TEX TS-program = lualatex
\documentclass[fleqn]{article}
\usepackage{siunitx} % also loads xparse and expl3
\sisetup
{ per-mode = fraction ,
exponent-to-prefix = true ,
round-mode = places ,
round-precision = 2 ,
scientific-notation = engineering,
zero-decimal-to-integer = true
}
\begin{document}
\SI{\directlua{tex.sprint(0.0001^2)}}{\metre\squared}
\end{document}