todonotes and tikzexternalize
I had this very problem a while ago, just for the \todo
command (I never use \missingfigure
). Here's how I fixed it (place this in your preamble, somewhere after todonotes
and tikz
/pgfplots
is called):
\makeatletter
\renewcommand{\todo}[2][]{\tikzexternaldisable\@todo[#1]{#2}\tikzexternalenable}
\makeatother
Now, \todo
will be ignored by the externalization process.
Hence, for the \missingfigure
command you need
\makeatletter
\renewcommand{\missingfigure}[2][]{\tikzexternaldisable\@missingfigure[#1]{#2}\tikzexternalenable}
\makeatother
For me neither of the proposed solutions worked. Maybe it is platform-dependent, taking into consideration the significant number of up-votes in favor of the accepted answer.
However, mSSM's approach with \let
was close. The reason for it not to work properly with \missingfigure
is that the latter consumes an optional argument. The simple \let
fails to copy all required information to a new macro. According to this piece, one should use the letltxmacro package. Eventually, my working version is:
\usepackage{letltxmacro}
\LetLtxMacro{\oldmissingfigure}{\missingfigure}
\renewcommand{\missingfigure}[2][]{\tikzexternaldisable\oldmissingfigure[{#1}]{#2}\tikzexternalenable}
\LetLtxMacro{\oldtodo}{\todo}
\renewcommand{\todo}[2][]{\tikzexternaldisable\oldtodo[#1]{#2}\tikzexternalenable}