我可以在 siunitx 中定义一个行为类似于 \ang 的新单位吗?

我可以在 siunitx 中定义一个行为类似于 \ang 的新单位吗?

siunitx包支持使用angle-symbol-over-decimal开关以“天文学风格”放置度数符号,以及使用以下形式简单输入度分秒值

\ang{6;7;6.5}

有没有办法使用包的\DeclareSIUnit宏来定义相应的格式赤经例如,可以使用类似

\ra[ra-symbol-over-decimal]{5.237}
\ra{5.237} 
\ra{5;15;6.5} 

(大致)生产

在此处输入图片描述

间距和其他行为是否遵循软件包的当前设置\ang

答案1

阅读siunitx手册(5.15“符号”,第 62/63 页)可以找到两种方法来实现这一点:

  1. 重新定义\SIUnitSymbolDegree, -Arcminute和 -Arcsecond
  2. 使用选项text-/ math-degree、 -arcminute和 - arcsecond(表 43,第 63 页)

两种情况均适用:

新的宏\ra接受两个参数:

  • 一个可选项,传递\ang
  • 一个是强制性的(角度本身)。

所有“弧格式”选项(angle-symbol-over-decimal,,arc-separator...)也可以赋予\ra

解决方案 1

\newcommand*{\ra}[2][]{{% extra pair of braces to keep the \def-intion local!
    \def\SIUnitSymbolDegree{\textsuperscript{h}}%
    \def\SIUnitSymbolArcminute{\textsuperscript{m}}%
    \def\SIUnitSymbolArcsecond{\textsuperscript{s}}%
    \ang[#1]{#2}}%
}

解决方案 2

\newcommand*{\ra}[2][]{%
    \ang[
        math-degree=\textsuperscript{h},
        text-degree=\textsuperscript{h},
        math-arcminute=\textsuperscript{m},
        text-arcminute=\textsuperscript{m},
        math-arcsecond=\textsuperscript{s},
        text-arcsecond=\textsuperscript{s},
        #1]{#2}%
}

代码

\documentclass{article}
\usepackage{siunitx}

\newcommand*{\ra}[2][]{{% extra pair of braces for solution 1, doesn't hurt for solution 2
%   \def\SIUnitSymbolDegree{\textsuperscript{h}}%     Solution 1
%   \def\SIUnitSymbolArcminute{\textsuperscript{m}}%  Solution 1
%   \def\SIUnitSymbolArcsecond{\textsuperscript{s}}%  Solution 1
    \ang[
        math-degree=\textsuperscript{h},             % Solution 2
        text-degree=\textsuperscript{h},             % Solution 2
        math-arcminute=\textsuperscript{m},          % Solution 2
        text-arcminute=\textsuperscript{m},          % Solution 2
        math-arcsecond=\textsuperscript{s},          % Solution 2
        text-arcsecond=\textsuperscript{s},          % Solution 2
        #1]{#2}%
}}
\begin{document}
\ra[angle-symbol-over-decimal]{5.237}   \par
\ra{5.237}        \par \ra{5;15;6.5}    \par \vspace{2ex}
\ang{2.3;3.4;4.5} \par \ra{2.3;3.4;4.5} \par \ang{2.3;3.4;4.5} \par
\ra[angle-symbol-over-decimal,arc-separator=\,]{2.3}           \par \vspace{2ex}
$\ra[angle-symbol-over-decimal]{5.237} \quad \ra{5.237} \quad \ra{5;15;6.5}$
\end{document}

输出

输出

答案2

自 2012 年以来,siunitx 包的代码已经更新,现在两种解决方案都无法按预期工作(但也不会引发错误,这是一件好事)。

拟议的解决方案 2@Qrrbrbirlbel 可以使用以下方法轻松纠正

\newcommand*{\ra}[2][]{{
    \ang[
        angle-symbol-degree=\textsuperscript{h},
        angle-symbol-minute=\textsuperscript{m},
        angle-symbol-second=\textsuperscript{s},
        #1]{#2}%
}}

因此代码

\documentclass{article}
\usepackage{siunitx}

\newcommand*{\ra}[2][]{{
    \ang[
        angle-symbol-degree=\textsuperscript{h},
        angle-symbol-minute=\textsuperscript{m},
        angle-symbol-second=\textsuperscript{s},
        #1]{#2}%
}}

\begin{document}

\ra[angle-symbol-over-decimal]{5.237} \par
\ra{5.237}.                           \par 
\ra{5;15;6.5}                         \par 

\vspace{2ex}

\ang{2.3;3.4;4.5}                     \par 
\ra{2.3;3.4;4.5}                      \par 
\ang{2.3;3.4;4.5}                     \par
\ra[angle-symbol-over-decimal,arc-separator=\,]{2.3} \par 

\vspace{2ex}

$\ra[angle-symbol-over-decimal]{5.237} \quad \ra{5.237} \quad \ra{5;15;6.5}$

\end{document}

按预期工作并输出

希望这有用!

相关内容