\documentclass{article}
\usepackage{ifthen}
\usepackage[final,pdftex]{graphicx}
\newboolean{GraphicsDraft}
\setboolean{GraphicsDraft}{true}
\newcommand{\nograph}{%
\ifthenelse{\boolean{GraphicsDraft}}
{true}%
{false}%
}%nograph
\begin{document}
\includegraphics*[draft=\nograph]{pic} % This gives an error
%
\renewcommand\nograph{\ifGraphicsDraft true\else false\fi}
\includegraphics*[draft=\nograph]{pic} % This is OK
\end{document}
ifthenelse 有问题,而 \ifGraphicsDraft 可以工作
我是不是做了什么蠢事或者这真的是一个 bug
答案1
您需要一个可扩展的测试,但它\ifthenelse
并不具备。
\documentclass{article}
\usepackage[final]{graphicx}
\usepackage{etoolbox}
\newtoggle{GraphicsDraft}
\togglefalse{GraphicsDraft}
\newcommand{\nograph}{%
\iftoggle{GraphicsDraft}{true}{false}%
}
\begin{document}
\includegraphics[draft=\nograph]{example-image-a}
\toggletrue{GraphicsDraft}
\includegraphics[draft=\nograph]{example-image-b}
\end{document}
答案2
密钥的值draft
必须扩张为真或假,并且\ifthenelse
不能通过扩展起作用。它失败的原因与
\includegraphics[draft=\def\tmp{true}\tmp]
失败,即使\def\tmp{true}\tmp
可以排版true
。
你可以,正如你指示的那样使用
\renewcommand\nograph{\ifGraphicsDraft true\else false\fi}
或者更简单,根本没有开关,而是
\setboolean{GraphicsDraft}{true}
或者
\setboolean{GraphicsDraft}{true}
只要
\newcommand\nograph{true}
或者
\newcommand\nograph{false}
然后\nograph
直接扩展为true或false。