Envoltorio para la macro \SI de siunitx para dividir automáticamente el número y la unidad

Envoltorio para la macro \SI de siunitx para dividir automáticamente el número y la unidad

Problema

Utilizo el siunitxpaquete para componer números y unidades con el espaciado correcto, etc. Hay un comando

\SI{<number>}{<unit>}

para eso. Sin embargo, sería mucho más fácil escribir algo como

\xSI{<number and unit>}

y dejar que LaTeX divida automáticamente el número y la unidad y llame \SI{}{}internamente.

\xSI{9.81m/s^2}  →  \SI{9.81}{m/s^2}
\xSI{1e-3m}      →  \SI{1e-3}{m}

Sé que expl3proporciona cierta funcionalidad de expresiones regulares, pero como sólo estoy familiarizado con LaTeX "normal", no sé por dónde empezar.

Pregunta

¿Cómo puedo escribir una función contenedora SI{}{}(¿usando expl3?) para que el número y las partes de la unidad se dividan automáticamente?

Respuesta1

Encuentra una expresión regular para números en formato científico.aquí

\documentclass{article}
\usepackage{siunitx,l3regex}
\ExplSyntaxOn
\NewDocumentCommand{\xSI}{ O{} m }
 {
  \ralfix_split:n { #2 }
  \ralfix_si:n { #1 }
 }

\seq_new:N \l__ralfix_pieces_seq
\cs_new_protected:Npn \ralfix_split:n #1
 {
  \regex_split:nnN
   {
    ( [ - + ]? [0-9]* [\.\,]? [0-9]+ ( [eE] [-+]? [0-9]+ )? )
    (.*)
   }
   { #1 }
   \l__ralfix_pieces_seq
 }
\cs_new_protected:Npn \ralfix_si:n #1
 {
  \use:x
   {
    \exp_not:n {\SI[#1]}
    {\seq_item:Nn \l__ralfix_pieces_seq {2}}
    {\seq_item:Nn \l__ralfix_pieces_seq {4}}
   }
 }
\ExplSyntaxOff
\begin{document}
\xSI{9.81m/s^2}

\xSI{1e-3m}

\xSI[output-decimal-marker={,}]{1,2e-33kV}
\end{document}

La función podría refinarse examinando primero el elemento número 1 en la secuencia resultante, que no estará vacío si no se encuentra ninguna coincidencia.

Dicho esto, te recomendaría usar \SI{...}{...} que no es mucho más difícil de escribir y separa claramente las diferentes cosas entre sí.

ingrese la descripción de la imagen aquí

información relacionada