siunitx' \SI 巨集的包裝,自動分割數字和單位

siunitx' \SI 巨集的包裝,自動分割數字和單位

問題

我使用siunitx-package 來排版具有正確間距的數字和單位等。

\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 來改進該函數,如果未找到匹配項,則該項目將非空。

這就是說,我建議您使用 \SI{...}{...} 打字並不困難,可以清楚地區分不同的事物。

在此輸入影像描述

相關內容