
문제
-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{...}{...}
이는 입력하기가 훨씬 더 어렵지 않으며 서로 다른 항목을 명확하게 구분합니다.