解决了我的以前的问题涉及\savebox
,\tikzexternalize
我已经面对下一个了。我想使用我在\pgfmathdeclarefunction
a 中的序言中或之后定义的函数savebox
。在 a 之外使用它时效果很好tikzpicture
,但在 a 内部它会被优化掉(参见下面示例中的注释)。为什么会这样?或者:我怎样才能让 TikZ 不优化图形?请注意此解决方案没有帮助。
\documentclass{article}
\usepackage[english]{babel}
\usepackage{tikz,pgfplots}
\usetikzlibrary{positioning}
\usepgfplotslibrary{external}
\tikzexternalize
\begin{document}
\pgfmathdeclarefunction{gauss}{2}{%
\pgfmathparse{1*exp(-(#2)^2/(#1^2))}%
}
\newsavebox\boxCPAin
\savebox\boxCPAin{
\begin{tikzpicture}
\tikzset{external/optimize=false}%
\draw[domain=-1:1,samples=200] plot(\x,{gauss(.33,\x)});
\end{tikzpicture}
}
\usebox\boxCPAin % works!
\begin{tikzpicture}
\node (test) {\usebox\boxCPAin}; % tikzpicture optimized away because it does not contribute to exported PDF
\end{tikzpicture}
\end{document}
答案1
savebox
有趣的是,当我将声明放在我的tikzpicture
环境中时,它起作用了:
\documentclass{article}
\usepackage[english]{babel}
\usepackage{tikz,pgfplots}
\usetikzlibrary{positioning}
\usepgfplotslibrary{external}
\tikzexternalize
\begin{document}
\pgfmathdeclarefunction{gauss}{2}{%
\pgfmathparse{1*exp(-(#2)^2/(#1^2))}%
}
\begin{tikzpicture}
\newsavebox\boxCPAin
\savebox\boxCPAin{
\begin{tikzpicture}
\tikzset{external/optimize=false}%
\draw[domain=-1:1,samples=200] plot(\x,{gauss(.33,\x)});
\end{tikzpicture}
}
\node (test) {\usebox\boxCPAin}; % works!
\end{tikzpicture}
\end{document}
显然 TikZ 无法优化,savebox
因为它刚刚在同一个中创建tikzpicture
。