pgfmathdeclarefunction 与 savebox 和 tikzexternalize: tikzpicture 进行了优化

pgfmathdeclarefunction 与 savebox 和 tikzexternalize: tikzpicture 进行了优化

解决了我的以前的问题涉及\savebox\tikzexternalize我已经面对下一个了。我想使用我在\pgfmathdeclarefunctiona 中的序言中或之后定义的函数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

相关内容