I am trying to externalize pgfplots, gnuplot and contour gnuplot in beamer. Towards this end I am using the visible on=<> facility of \usetikzlibrary{overlay-beamer-styles} (cf. this answer by user Daniel) as well as the automatic numbering solution from user Loop Space.
I created a MWE consisting of 3 frames each hosting 3 slides that contain (A) vanilla pgfplots (B) gnuplots (C) contour gnuplots.
Expected Behaviour: When externalizing, say the images of the second frame, images on other frames should be ignored.
Actual Behaviour: The contour plots get computed in every single overlay. In total 81 sets of contour plots get computed. If one deletes the first 2 frames (which do not contain contour plots), then still 27 sets of contours get computed.
How to fix this bug?
\documentclass{beamer}
\usepackage{tikz, pgfplots}
\pgfplotsset{compat=1.16}
\usepgfplotslibrary{external}
\usetikzlibrary{overlay-beamer-styles}
% automatic beamer numbering
%\url{https://tex.stackexchange.com/q/119428/86}
\makeatletter
\newcommand*{\overlaynumber}{\number\beamer@slideinframe}
\tikzset{
beamer externalizing/.style={%
execute at end picture={%
\tikzifexternalizing{%
\ifbeamer@anotherslide
\pgfexternalstorecommand{\string\global\string\beamer@anotherslidetrue}%
\fi
}{}%
}%
},
external/optimize=false
}
\let\orig@tikzsetnextfilename=\tikzsetnextfilename
\renewcommand\tikzsetnextfilename[1]{\orig@tikzsetnextfilename{#1-\overlaynumber}}
\makeatother
\tikzset{every picture/.style={beamer externalizing}}
\tikzexternalize[only named=true]
\begin{document}
\begin{frame}{pgfplots}
\tikzsetnextfilename{pgfplots}
\begin{tikzpicture}
\begin{axis}
\addplot[visible on=<1-3>] {x};
\addplot[visible on=<2-3>] {exp(x)};
\addplot[visible on=<3-3>] {x*x};
\end{axis}
\end{tikzpicture}
\end{frame}
\begin{frame}{gnuplot}
\tikzsetnextfilename{gnuplot}
\begin{tikzpicture}
\begin{axis}
\addplot[visible on=<1-3>] gnuplot{x};
\addplot[visible on=<2-3>] gnuplot{exp(x)};
\addplot[visible on=<3-3>] gnuplot{x*x};
\end{axis}
\end{tikzpicture}
\end{frame}
\begin{frame}{gnuplot contour}
\tikzsetnextfilename{contour}
\begin{tikzpicture}
\begin{axis}[view={0}{90}, domain=-2:2]
\addplot3[visible on=<1-3>,contour gnuplot={draw color=red,number=20, labels=false}] {x};
\addplot3[visible on=<2-3>,contour gnuplot={draw color=blue,number=20, labels=false}] {y};
\addplot3[visible on=<3-3>,contour gnuplot={draw color=black,number=20, labels=false}] {x^2+y^2};
\end{axis}
\end{tikzpicture}
\end{frame}
\end{document}
pdflatex --shell-escape(version 3.14159265-2.6-1.40.20). After successful compilation there are a total of 312 files, 81 of the formcontourmpX.table. i.e. gnuplot gets called internally 81 times instead of 9 times, which is a huge wast of resources – Hyperplane Jan 05 '20 at 15:18