如何保护移动参数中的脆弱命令?\caption 中包含 \ifthenelse 的宏的情况

如何保护移动参数中的脆弱命令?\caption 中包含 \ifthenelse 的宏的情况

该脚本按预期工作:

\documentclass{article}
\usepackage{ifthen}
\usepackage{graphicx}
\newcommand{\foo}[1]{
  \newcommand{\capt}{
    \ifthenelse{\equal{#1}{ORIG}}
               {original}
               {optimised}
  }

}
\begin{document}
\foo{ORIG}
\end{document}

然而,当宏\capt插入到环境\caption中时figure

\documentclass{article}
\usepackage{ifthen}
\usepackage{graphicx}
\newcommand{\foo}[1]{
  \newcommand{\capt}{
    \ifthenelse{\equal{#1}{ORIG}}
               {original}
               {optimised}
  }
  \begin{figure}
    \includegraphics[width=0.5\textwidth]{example-image-a}
    \caption{\capt}
  \end{figure}
}
\begin{document}
\foo{ORIG}
\end{document}

错误是

! Undefined control sequence.
<argument> \equal

问题是什么?

我可能观察到的是普遍特征的症状。因此,非常感谢您能帮助我如何形成标题和这个问题,以反映这个问题的更普遍性质。

答案1

我不确定为什么要执行定义的中间步骤\capt;但是,问题在于这\ifthenelse是一个脆弱的命令,因此在标题或其他移动参数中应该受到保护。

有更好的方法,不需要杂技。

\documentclass{article}
\usepackage{graphicx}
\usepackage{etoolbox}

\newcommand{\foo}[1]{%
  \newcommand{\capt}{%
    \ifstrequal{#1}{ORIG}
      {original}
      {optimised}%
  }%
  \begin{figure}
    \includegraphics[width=0.5\textwidth]{example-image-a}
    \caption{\capt}
  \end{figure}
}
\begin{document}

\foo{ORIG}

\end{document}

不要忘记保护可能在输出中产生空格的行尾。

相关内容