Definindo novos comandos de unidade como derivados de unidades `\si`

Definindo novos comandos de unidade como derivados de unidades `\si`

No meu documento, preciso usar um grande número de unidades SI diferentes. Para facilitar minha digitação, normalmente defino novos comandos como \newcommand{\unitmass}{\si{\kilogram}}ou \newcommand{\unitmomentum}{\si{\kilogram\meter\per\second}}. Então posso usar algo como 2.5\unitmassou 3.4\unitmementume pronto. Isso me poupa muito esforço de digitação.

Não é um grande problema até que eu precise \si[2.5d-15]{\kilogram\meter\per\second}(observe a notação científica do número), o que ainda exige que eu digite a coisa completa. Uma alternativa é usar a notação matemática apenas para o número, pois $2.5\times 10^{-17}$\unitmomentum$não é uma excelente opção. Idealmente, eu gostaria de algo como \unitmomentum[2.5d-15]sobreviver.

O que significa que tenho que definir meus comandos de maneira muito mais complicada e existem dezenas (chegando rapidamente a centenas) deles. Portanto, devo definir um modelo de comandos opcionais de aceitação de argumentos.

Minha primeira abordagem foi

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

Funciona se eu permanecer satisfeito sem argumentos opcionais. Posso emitir dezenas de diretivas \SimpleSIunit{unittorque}{\newton\meter}e minha necessidade básica será atendida.

No entanto, o que eu realmente quero é dizer

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

O que obviamente não adianta. Alguma idéia de como posso corrigir isso?

Depois de pronunciar \SimpleSIunit{unittorque}{\newton\meter}, quero que essas quatro linhas produzam a mesma saída -

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

** PS:: EDITAR após comentário de @daleif **

Os espaçamentos são atendidos pelas seguintes diretivas antes de qualquer outra coisa. Ele usa o savesympacote. Não pretendo que o código abaixo seja meu trabalho original. Chame isso de programação Cargo-cult, mas não sou um estudante que precisa de lição de casa. Este é o meu trabalho profissional e utilizo o LaTeX como ferramenta.

% 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%
}

Responder1

Há funcionalidade integrada siunitxpara esse tipo de entrada

\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}

Observe que essa unitssintaxe semelhante a -não é a configuração padrão, pois acredito que esteja abaixo do ideal.

informação relacionada