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