方位角通常以零开头,例如东北方位角为 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}