使用逗号对 \fpeval 进行数字净化

使用逗号对 \fpeval 进行数字净化

\fpeval不喜欢以逗号作为分隔符的十进制数:

\documentclass[]{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{siunitx,xfp}
\sisetup{locale=DE}

\begin{document}
\num{1.5}
\num{1,5}
\num{\fpeval{1.5+1.4 + max(1.5 , 2 )}} 
\num{\fpeval{1,5+1,4 + max(1,5 , 2 )}} %error
\num{\fpeval{1,5+1.4}} %error

\end{document}

这给出

! Undefined control sequence.
<argument> \LaTeX3 error: 
                           Unexpected comma: extra arguments ignored.

作为一名德国人,我相当习惯使用逗号(其他德国人也一样),所以我必须不断纠正我的输入。有没有可扩展如何让它工作?

困难自然在于语法中使用了逗号\fpeval,例如 max。我会接受在这里使用空格的要求,或者使用另一个符号(例如);,或者使用一些保护命令,如\dontsanitize{max(1.5,2)}, 或max(1,5 \realcomma 2)

答案1

您可以使用 l3regex,digit替换.digit

\documentclass[]{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{siunitx,xfp}
\usepackage{l3regex}%unless you have very new expl3
\sisetup{locale=DE}
\let\oldnum\num
\ExplSyntaxOn
\def\num#1{\def\tmp{#1}\regex_replace_all:nnN{,([0-9])}{.\1}{\tmp}\oldnum{\tmp}}
\ExplSyntaxOff

\begin{document}
\num{1.5}
\num{1,5}
\num{\fpeval{1.5+1.4 + max(1.5 , 2 )}} 
\num{\fpeval{1,5+1,4 + max(1,5 , 2 )}} %error
\num{\fpeval{1,5+1.4}} %error

\end{document}

相关内容