使用 siunitx 为方位角指定前导零

使用 siunitx 为方位角指定前导零

方位角通常以零开头,例如东北方位角为 045°。我使用该siunitx包通过宏格式化文档中的所有其他量\SI,例如

\SI{100}{\metre}

\SI{45}{\degree}

结果是 45°。产生 045° 的最佳方法是什么,但要保留siunitx提供的有用方面,例如将值和单位保持在一起并留有适当的间距?

编辑:我可能已经想到了这个:

\SI[parse-numbers = false]{045}{\degree}

产生045°。

答案1

虽然\SI[parse-numbers = false]{045}{\degree}有效,但它也会关闭siunitx该条目的所有解析;要保留解析尝试

\SI[minimum-integer-digits = 3]{45}{\degree}

由于这很长,你可能想定义一个新命令\azimuth

\newcommand*{\azimuth}[1]{\SI[minimum-integer-digits = 3]{#1}{\degree}}

并使用它\azimuth{45}

如果你希望解析的所有数字siunitx至少有三位整数,那么使用

\sisetup{minimum-integer-digits = 3}

@Torbjørn T. 提到siunitx甚至还提供了一个恰当命名的角度命令\ang{}。所以\ang[minimum-integer-digits = 3]{45}也能满足您的要求。


以下的定义\azimuth始终为度产生三位数,为分和秒产生两位数。

\ExplSyntaxOn
\cs_new:Npn \__angle_print:nnn #1#2#3 {
  \IfNoValueF {#1}
    {\SI[minimum-integer-digits = 3]{#1}{\degree}}
  \IfNoValueF {#2}
    {\SI[minimum-integer-digits = 2]{#2}{\arcminute}}
  \IfNoValueF {#3}
    {\SI[minimum-integer-digits = 2]{#3}{\arcsecond}}
}
\NewDocumentCommand \azimuth { > { \SplitArgument { 2 } { ; } } m } {
  \__angle_print:nnn #1
}
\ExplSyntaxOff

将 的输出\azimuth{145;59;59} \azimuth{90;35;17} \azimuth{1;2;3}与 的输出进行比较: siunitx\ang{145;59;59} \ang{90;35;17} \ang{1;2;3}在此处输入图片描述

相关内容