该脚本按预期工作:
\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}
不要忘记保护可能在输出中产生空格的行尾。