保护文件路径中的脆弱变量。\includegraphics{} 中的 \ifthenelse 案例

保护文件路径中的脆弱变量。\includegraphics{} 中的 \ifthenelse 案例

在此脚本中:

\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}}%
}

因此 的定义\mydirectorydir1dir2

相关内容