为了熟悉 latex3 语法,我编写了一个小宏来转换长度(在 LaTeX 中已知)。
我在最后的 source3.pdf 第 206 页(229)发现了以下内容:
[+ - \ ] * ((? i) nan | inf | (\ d + | \ d * \. \ d +) (\ * e [+ - \ ] *
\ d +)?) \ *
但是如果我在宏中使用它,我会收到一条错误消息:
Range [+ - ] out of order in character class.
似乎带空格的反斜杠解释不正确。但如果我替换
[+ -\ ] with [+ -?]
那么它似乎有效了。
这里的正确输入应该是什么?
我很高兴得到提示。
\documentclass{article}
\usepackage{siunitx}
\sisetup{group-separator={\,},output-decimal-marker={,}}
\ExplSyntaxOn
\NewDocumentCommand { \convertlength } { O{} m m }
{
\tl_set:Nn \l_convert_length_tl { #2 }
\regex_replace_all:nnN { [+-?]*((?i)nan|inf|(\d+|\d*\.\d+)(\ *e[+-?]*\d+)?)\ * } { \c{num}\cB\{ \0 \cE\}\c{,} } \l_convert_length_tl
\ensuremath{ \text{ \tl_use:N \l_convert_length_tl } = \num[#1] { \dim_to_decimal_in_unit:nn { #2 } { 1#3 } } \,\text{ #3 } }
}
\ExplSyntaxOff
\begin{document}
\convertlength{1.5in}{cm} % cm mm nd pt dd bp in
\end{document}