使用 xparse 和 pgfmathprintnumber 的数字格式宏不适用于一个选项

使用 xparse 和 pgfmathprintnumber 的数字格式宏不适用于一个选项

我正在尝试编写一个宏,该宏使用几个选项来打印数字。该宏采用一个可选参数(即输出的精度)和一个带星号的版本(将单位附加到数字)。

  • \printExpressionFormatted{expr}应该计算表达式并打印结果
  • \printExpressionFormatted[2]{expr}应评估表达式将数字格式化为给定的精度并打印结果
  • \printExpressionFormatted*[2]{expr}并连接各单元。

这是 MWE

\documentclass{article}
\usepackage{xparse}
\usepackage{tikz}

\DeclareDocumentCommand\printExpressionFormatted{som}{
    \pgfmathparse{#3}
    \IfNoValueTF#2{\pgfmathresult}%
    {
        \pgfmathprintnumberto[/pgf/number format/fixed, precision=#2]{\pgfmathresult}{\myFormattedNumber}
        \IfBooleanTF#1{\myFormattedNumber~$\times~10^6 m^3$}{\myFormattedNumber}
    }
}


\begin{document}
\section{Testing}
\begin{tabular}{ll}
Unformatted & \printExpressionFormatted{746234.4485} \\
Formatted   & \printExpressionFormatted[2]{746234.4485} \\
Formatted with units &  \printExpressionFormatted*[2]{746234.4485} \\
\end{tabular}
\end{document}

第二和第三种方法工作正常,但第一种选择(无格式)会产生以下错误

! Missing number, treated as zero. <to be read again>

 l.19 ...d & \printExpressionFormatted{746234.4485}

答案1

您需要将参数括#2\IfNoValue花括号中,否则当未设置时#2,本质上-NoValue-只有第一个标记会被测试吃掉。

示例输出

\documentclass{article}
\usepackage{xparse}
\usepackage{tikz}

\tracingmacros=1
\DeclareDocumentCommand\printExpressionFormatted{som}{
    \pgfmathparse{#3}
    \IfNoValueTF{#2}{\pgfmathresult}%
    {
        \pgfmathprintnumberto[/pgf/number format/fixed, precision=#2]{\pgfmathresult}{\myFormattedNumber}
        \IfBooleanTF#1{\myFormattedNumber~$\times~10^6 m^3$}{\myFormattedNumber}
    }
}

\begin{document}
\section{Testing}
\begin{tabular}{ll}
Unformatted & \printExpressionFormatted{746234.4485} \\
Formatted   & \printExpressionFormatted[2]{746234.4485} \\
Formatted with units &  \printExpressionFormatted*[2]{746234.4485} \\
\end{tabular}
\end{document}

相关内容