我使用带有外部化的 pgfplots。当我尝试包含使用 的宏时\ifthenelse
,总是会执行“else”语句。当我关闭外部化时,它又可以正常工作。请参见以下示例:
\documentclass{report}
\usepackage{pgfplots}
\usepackage{ifthen}
% my new command
\newcommand{\plotcmd}[1]{
\begin{tikzpicture}
% different title depending on argument:
\begin{axis}[\ifthenelse{\boolean{#1}}{title={true}}{title={false}}]
\addplot {x};
\end{axis}
\end{tikzpicture}}
% begin of externalization
\usetikzlibrary{external}
\usepgfplotslibrary{external}
\tikzset{external/force remake}
\tikzexternalize
% end of externalization
\begin{document}
% use either of those to switch \ifthenelse on and off
\tikzexternalenable % now \ifthenelse is off
%\tikzexternaldisable % now \ifthenelse is on
% test my new command
\plotcmd{true} % should be titled 'true'
\plotcmd{false} % should be titled 'false'
\end{document}
这里发生什么问题了?
答案1
Jake 的评论就是答案:编译失败。这可以通过检查来验证<filename>-figure0.log
。
失败的直接原因是\ifthenelse
不能在评估键的地方使用(因为该命令不是“可扩展的”)。
有两种方法可以解决这个问题:
- 或者通过移动到
\ifthenelse
轴的前面并插入\pgfplotset
到它的主体中(如杰克所示)
或者
- 通过将 移到
\ifthenelse
的参数中title
。这是我的建议;它似乎更本地化:
\newcommand{\plotcmd}[1]{
\begin{tikzpicture}
% different title depending on argument:
\begin{axis}[title={\ifthenelse{\boolean{#1}}{true}{false}}]
\addplot {x};
\end{axis}
\end{tikzpicture}
}
这并不能解释为什么你的实验在没有外部化的情况下也能成功。从我的角度来看,它根本就不应该成功……事实上,在我的计算机上,如果我切换到,它就不起作用\tikzexternaldisable
。