我正在使用 pgfmathparse、pgfmathroundto 和 pgfmathresult 计算一个值。在普通文本模式下,它们运行正常,但是当我在标题中调用该命令时,我收到“不完整 \iffalse;第 14 行之后的所有文本都被忽略”错误。
这是一个最小的工作示例:
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\newcommand{\myCalculation}[2]{\pgfmathparse{100 - #1 - #2}100 - #1 - #2 = \pgfmathroundto{\pgfmathresult}\pgfmathresult}
\begin{document}
Calculate \myCalculation{30}{20.11}. % this works.
\begin{figure}[h]
\centering
\includegraphics[width=0.5\linewidth]{example-image}
\caption{Calculate \myCalculation{30}{20.11}.} % this returns an error.
\end{figure}
\end{document}
顺便说一句,表格标题也会发生这种情况。虽然它在表格内部有效,但调用该函数的表格标题会再次引发错误。
有没有办法让这样的命令在标题中起作用,或者这是一个已知的错误?
答案1
您可以使用受保护的命令(不是\pgfmathparse
)封装计算并使用 LaTeX 内核中包含的更精确的浮点库。
\documentclass{article}
\usepackage{graphicx}
\NewDocumentCommand{\myCalculation}{mm}{%
$100 - #1 - #2 = \fpeval{round(100-#1-#2,\myAccuracy)}$%
}
\newcommand{\myAccuracy}{2}
\begin{document}
\listoffigures
\section{Test}
Calculate \myCalculation{30}{20.11}. % this works.
\begin{figure}[htp]
\centering
\includegraphics[width=0.5\linewidth]{example-image}
\caption{Calculate \myCalculation{30}{20.11}.}
\end{figure}
\end{document}