标题中 pgfmathparse 的 \iffalse 错误不完整

标题中 pgfmathparse 的 \iffalse 错误不完整

我正在使用 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}

在此处输入图片描述

相关内容