pgfplots:外部化和 ifthen

pgfplots:外部化和 ifthen

我使用带有外部化的 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 不能在评估键的地方使用(因为该命令不是“可扩展的”)。

有两种方法可以解决这个问题:

  1. 或者通过移动到\ifthenelse轴的前面并插入\pgfplotset到它的主体中(如杰克所示)

或者

  1. 通过将 移到\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

相关内容