숫자와 단위를 자동으로 분할하는 siunitx' \SI 매크로용 래퍼

숫자와 단위를 자동으로 분할하는 siunitx' \SI 매크로용 래퍼

문제

-package를 사용하여 siunitx숫자와 단위를 올바른 간격 등으로 조판합니다. 다음 명령이 있습니다.

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

그에 대한. 그러나 다음과 같이 작성하는 것이 훨씬 쉬울 것입니다.

\xSI{<number and unit>}

LaTeX가 자동으로 번호와 단위를 분할하고 \SI{}{}내부적으로 호출하도록 합니다.

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

나는 그것이 expl3정규식 기능을 제공한다는 것을 알고 있지만 "일반" LaTeX에만 익숙하기 때문에 어디서부터 시작해야할지 모르겠습니다.

질문

숫자와 단위 부분이 자동으로 분할되도록 SI{}{}(? 사용 ) 에 대한 래퍼 함수를 ​​어떻게 작성합니까 ?expl3

답변1

과학적인 형식의 숫자에 대한 정규식을 찾습니다.여기

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

결과 시퀀스에서 항목 번호 1을 먼저 검사하여 함수를 구체화할 수 있습니다. 항목 번호 1은 일치하는 항목이 없으면 비어 있지 않습니다.

즉, 다음을 사용하는 것이 좋습니다. \SI{...}{...} 이는 입력하기가 훨씬 더 어렵지 않으며 서로 다른 항목을 명확하게 구분합니다.

여기에 이미지 설명을 입력하세요

관련 정보