![如何将通用单位转换为 SI 单位](https://linux22.com/image/462330/%E5%A6%82%E4%BD%95%E5%B0%86%E9%80%9A%E7%94%A8%E5%8D%95%E4%BD%8D%E8%BD%AC%E6%8D%A2%E4%B8%BA%20SI%20%E5%8D%95%E4%BD%8D.png)
是否可以将文档中使用到的所有单位自动转换为 7 个 SI 单位之一?
例如
\unit{\pascal}
,
我希望将其渲染为
\unit{\newton\per\square\meter}
,而不需要在任何地方进行调整。
答案1
您可以在序言中(重新)声明一次相关单位,如下所示:
\documentclass{article}
\usepackage{siunitx}
\DeclareSIUnit{\pascal}{\newton\per\square\meter}
\begin{document}
\unit{\pascal}
\end{document}
编辑:在用户手册第 14 页写道:
加载 siunitx 后,可以使用来更改预定义单元的含义
\DeclareSIUnit
。这将用较新的版本覆盖原始定义。
因此使用这种方法应该不会有任何问题。
siunitx
编辑 2:我花了一些时间(重新)声明包中有意义的SI 派生单位(见下文,我在本网站作为参考并通过维基百科仔细检查)。请注意,我b
在宏名称前面添加了一个,以免覆盖原始宏。我选择这样做,因为我遇到了一个问题,即将所有派生单位声明为由七个 SI 基本单位表示。包中定义了像MPa
或这样的单位缩写kN
。将带有缩写的单位与重新定义的单位宏一起使用不仅会导致由于双前缀而导致的错误,还会导致错误的单位,例如Mm^{-1}kgs^{-2}
而不是MPa
。总之,我会避免重新定义现有的 SI 派生单位,而是使用新的单位。但是,如果您想使用现有的宏,请小心,不要使用任何带前缀的缩写(或者至少检查哪些是安全的)或覆盖它们。
\DeclareSIUnit{\bhertz}{\per\second}
\DeclareSIUnit{\bnewton}{\kilo\gram\metre\per\square\second}
\DeclareSIUnit{\bpascal}{\kilo\gram\per\metre\per\square\second}
\DeclareSIUnit{\bjoule}{\kilo\gram\square\metre\per\square\second}
\DeclareSIUnit{\bwatt}{\kilo\gram\square\metre\per\cubic\second}
\DeclareSIUnit{\bcoulomb}{\ampere\second}
\DeclareSIUnit{\bvolt}{\kilo\gram\square\metre\per\ampere\per\cubic\second}
\DeclareSIUnit{\bfarad}{\per\kilo\gram\per\square\metre\square\ampere\second\tothe{4}}
\DeclareSIUnit{\bohm}{\kilo\gram\square\metre\per\square\ampere\per\cubic\second}
\DeclareSIUnit{\bsiemens}{\per\kilo\gram\per\square\metre\square\ampere\cubic\second}
\DeclareSIUnit{\bweber}{\kilo\gram\square\metre\per\ampere\per\square\second}
\DeclareSIUnit{\btesla}{\kilo\gram\per\ampere\per\square\second}
\DeclareSIUnit{\bhenry}{\kilo\gram\square\metre\per\square\ampere\per\square\second}
% wouldn't recommend using:
\DeclareSIUnit{\bbecquerel}{\per\second}
\DeclareSIUnit{\bgray}{\square\metre\per\square\second}
\DeclareSIUnit{\bsievert}{\square\metre\per\square\second}
\DeclareSIUnit{\bkatal}{\mole\per\second}
如果您更喜欢单位的方案/顺序,m-kg-s-A-K-mol-cd
那么下面的版本将是您的最佳选择。
\DeclareSIUnit{\bhertz}{\per\second}
\DeclareSIUnit{\bnewton}{\metre\kilo\gram\per\square\second}
\DeclareSIUnit{\bpascal}{\per\metre\kilo\gram\per\square\second}
\DeclareSIUnit{\bjoule}{\square\metre\kilo\gram\per\square\second}
\DeclareSIUnit{\bwatt}{\square\metre\kilo\gram\per\cubic\second}
\DeclareSIUnit{\bcoulomb}{\second\ampere}
\DeclareSIUnit{\bvolt}{\square\metre\kilo\gram\per\cubic\second\per\ampere}
\DeclareSIUnit{\bfarad}{\per\square\metre\per\kilo\gram\second\tothe{4}\square\ampere}
\DeclareSIUnit{\bohm}{\square\metre\kilo\gram\per\cubic\second\per\square\ampere}
\DeclareSIUnit{\bsiemens}{\per\square\metre\per\kilo\gram\cubic\second\square\ampere}
\DeclareSIUnit{\bweber}{\square\metre\kilo\gram\per\square\second\per\ampere}
\DeclareSIUnit{\btesla}{\kilo\gram\per\square\second\per\ampere}
\DeclareSIUnit{\bhenry}{\square\metre\kilo\gram\per\square\second\per\square\ampere}
我省略了\radian
和,\steradian
因为它们的 SI 基本单位是1
和,也是\lumen
从\lux
和派生而来的,\candela
使用\steradian
哪个(我认为)可能会导致转换错误(但我对此并不完全确定,如果您知道得更多,请随时告诉我)。此外,由于\degreeCelsius
只是相对于的派生单位273.15 K
,直接转换会导致绝对温度出现错误的数量,所以我也没有将其包括在内。