在此脚本中:
\documentclass{article}
\usepackage{ifthen}
\usepackage{graphicx}
\newcommand{\myfigure}[1]{%
\def\mydirectory{\ifthenelse{\equal{#1}{first}}{dir1}{dir2}}
my directory is \mydirectory
\begin{figure}
% \includegraphics[width=0.45\textwidth]{\protect\mydirectory/mypic.pdf}%
\includegraphics[width=0.45\textwidth]{example-image-a}%
\caption{picture in \protect\mydirectory}
\end{figure}
}
\begin{document}
\myfigure{first}
\end{document}
我是脆弱\protect
变量- 请参阅评论\mydirectory
\caption
如何保护移动参数中的脆弱命令?\caption 中包含 \ifthenelse 的宏的情况。
但是,当我提供:
\includegraphics[width=0.45\textwidth]{\mydirectory/mypic.pdf}
脆弱的经典症状\ifthenelse
表现为:
! Undefined control sequence.
<argument> \equal
{first}{first}
甚至无法治愈\protect
:
\includegraphics[width=0.45\textwidth]{\protect\mydirectory/mypic.pdf}
如何保护文件路径中的脆弱变量?
答案1
我不会使用ifthenelse
,但如果你使用它(或任何其他测试机制),你想\mydirectory
扩展到目录名称,而不是最终可能排版目录名称的复杂的分配和测试序列。
所以
\newcommand{\myfigure}[1]{%
\def\mydirectory{\ifthenelse{\equal{#1}{first}}{dir1}{dir2}}
不可能工作,你需要
\newcommand{\myfigure}[1]{%
\ifthenelse{\equal{#1}{first}}%
{\def\mydirectory{dir1}}%
{\def\mydirectory{dir2}}%
}
因此 的定义\mydirectory
是dir1
或dir2
。