私の文書では、多数の異なる SI 単位を使用する必要があります。入力を楽にするために、通常は新しいコマンドを\newcommand{\unitmass}{\si{\kilogram}}
またはとして定義します。その後、または の\newcommand{\unitmomentum}{\si{\kilogram\meter\per\second}}
ようなものを使用して実行できます。これにより、入力の手間が大幅に省けます。2.5\unitmass
3.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 構文は最適ではないと思われるため、デフォルト設定ではないことに注意してください。