更新:

更新:

更新:

siunitx现在已更新所请求的功能/错误修复,并可在 Tex Live 中使用,而且运行良好。

再次提出这个问题的原因

上次收到的答复让我感觉被误解了,我知道我可能没有表达清楚我的意思。我会再次尝试解释。

接受答案的要求,可获得赏金

我将接受能够显示以下任一类型答案的答案:

  • 我的输入是错误的,给出一些不同的命令将得到我希望的结果。
  • 我对数学的理解是错误的。我期望的结果完全错误,请说明原因。
  • siunitx有一个错误。我应该报告吗?有快速修复方法吗?
  • 自定义代码给了我期望的结果。见下文siunitx就是不这样做?

问题本身:

Siunitx可以将指数转换为前缀,并且对于许多输入来说,这都非常好。但是,当使用 给出\si-commands时cubedsquared则无法正常工作。我的例子现在应该可以清楚地说明这一点。我可能会补充说,这种情况也会发生在cubicsquared中,我当然知道这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}

相关内容