`\si` 単位の派生として新しい単位コマンドを定義する

`\si` 単位の派生として新しい単位コマンドを定義する

私の文書では、多数の異なる SI 単位を使用する必要があります。入力を楽にするために、通常は新しいコマンドを\newcommand{\unitmass}{\si{\kilogram}}またはとして定義します。その後、または の\newcommand{\unitmomentum}{\si{\kilogram\meter\per\second}}ようなものを使用して実行できます。これにより、入力の手間が大幅に省けます。2.5\unitmass3.4\unitmementum

必要になるまではそれほど問題にはなりませんが\si[2.5d-15]{\kilogram\meter\per\second}(数値の科学的記数法に注意してください)、それでも完全な数値を入力する必要があります。 1 つの代替案は、次のように数値にのみ数学記数法を使用することですが、これはあまり良い選択肢ではありません。 理想的には、次のような方法で済ませ$2.5\times 10^{-17}$\unitmomentum$たいです。\unitmomentum[2.5d-15]

つまり、コマンドをはるかに複雑に定義する必要があり、その数は数十 (すぐに数百に達します) になります。したがって、オプションの引数を受け入れるコマンドのテンプレートを定義する必要があります。

私の最初のアプローチは

\newcommand{\SimpleSIunit}[2]{%
    \expandafter\newcommand\csname #1\endcsname{\si{#2}}%
}

オプションの引数なしで満足している場合は機能します。 のようなディレクティブを数十個発行でき\SimpleSIunit{unittorque}{\newton\meter}、基本的なニーズは満たされます。

しかし、私が本当に言いたいのは

\newcommand{\SimpleSIunit}[2]{%
    \expandafter\newcommand[1][]\csname #1\endcsname{\si[##1]{#2}}%
}

明らかに何の役にも立ちません。これを修正する方法はありますか?

を発音した後\SimpleSIunit{unittorque}{\newton\meter}、次の4行で同じ出力を生成したいです -

2.5\unittorque
\unittorque[2.5]
2.5\si{\newton\meter}
\si[2.5]{\newton\meter}

** PS:: @daleif のコメント後の編集 **

スペースは、他の作業を行う前に、次のディレクティブによって処理されます。savesymパッケージを使用します。以下のコードが私のオリジナル作品であると主張するつもりはありません。これを Cargo-cult プログラミングと呼ぶかもしれませんが、私は宿題が必要な学生ではありません。これは私の専門的な仕事であり、ツールとして LaTeX を使用しています。

% spacing of siunits
\newlength{\siunitspace}
\sisetup{number-unit-product = \hspace{\siunitspace}}

% new units -- to act as supplement to SI units package \si{unit}
\input{unitdef-v01-2018} % a seperate file maintains this

\savesymbol{si}
\newcommand{\si}[2][?]{%
    \if\relax#1\relax%
    \hspace{\siunitspace}\origsi{#2}\xspace%
    \else%
    \if?#1\hspace{\siunitspace}\origsi{#2}\xspace\else\SI{#1}{#2}\xspace\fi%
    \fi%
}

答え1

siunitxこのタイプの入力には機能が組み込まれています

\documentclass{article}
\usepackage{siunitx}
\sisetup{free-standing-units, ,unit-optional-argument, space-before-unit}
\DeclareSIUnit{\unitmomentum}{\kilogram\meter\per\second}
\begin{document}
Some text $3.5\unitmomentum$ and $\unitmomentum[2.5e-3]$.
\end{document}

このunits-like 構文は最適ではないと思われるため、デフォルト設定ではないことに注意してください。

関連情報