En mi documento, necesito utilizar una gran cantidad de unidades SI diferentes. Para facilitar mi escritura, normalmente defino nuevos comandos como \newcommand{\unitmass}{\si{\kilogram}}
o \newcommand{\unitmomentum}{\si{\kilogram\meter\per\second}}
. Entonces puedo usar algo como 2.5\unitmass
o 3.4\unitmementum
y listo. Me ahorra mucho esfuerzo de mecanografía.
No es un gran problema hasta que lo necesite \si[2.5d-15]{\kilogram\meter\per\second}
(observe la notación científica del número), lo que aún requiere que escriba el asunto completo. Una alternativa es usar notación matemática solo para el número, lo cual $2.5\times 10^{-17}$\unitmomentum$
no es una excelente opción. Idealmente me gustaría algo así \unitmomentum[2.5d-15]
para salir adelante.
Lo que significa que tengo que definir mis comandos de manera mucho más complicada y hay docenas (que rápidamente llegan a cientos) de ellos. Por lo tanto, debo definir una plantilla de argumentos opcionales que acepten comandos.
Mi primer acercamiento fue
\newcommand{\SimpleSIunit}[2]{%
\expandafter\newcommand\csname #1\endcsname{\si{#2}}%
}
Funciona si me quedo contento sin argumentos opcionales. Puedo emitir docenas de directivas similares \SimpleSIunit{unittorque}{\newton\meter}
y mi necesidad básica está cubierta.
Sin embargo, lo que realmente quiero es decir
\newcommand{\SimpleSIunit}[2]{%
\expandafter\newcommand[1][]\csname #1\endcsname{\si[##1]{#2}}%
}
Lo cual evidentemente no sirve de nada. ¿Alguna idea de cómo puedo rectificarlo?
Después de pronunciar \SimpleSIunit{unittorque}{\newton\meter}
, quiero que estas cuatro líneas produzcan el mismo resultado:
2.5\unittorque
\unittorque[2.5]
2.5\si{\newton\meter}
\si[2.5]{\newton\meter}
** PD:: EDITAR después del comentario de @daleif **
Las siguientes directivas se encargan de los espacios antes de hacer cualquier otra cosa. Utiliza el savesym
paquete. No pretendo que el código siguiente sea mi trabajo original. Llámelo programación de culto a Cargo, pero no soy un estudiante que necesite una tarea. Este es mi trabajo profesional y uso LaTeX como herramienta.
% 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%
}
Respuesta1
Hay una funcionalidad integrada siunitx
para este 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}
Tenga en cuenta que esta units
sintaxis similar a - no es la configuración predeterminada, ya que creo que no es óptima.