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\unitmass
ou 3.4\unitmementum
e 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 savesym
pacote. 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 siunitx
para 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 units
sintaxe semelhante a -não é a configuração padrão, pois acredito que esteja abaixo do ideal.