在我的文档中,我使用todonotes
和TikZ
/ pgfplots
。在 中激活外部化后,TikZ
我意识到 也todonotes
全部导出了(因为它们基于TikZ
)。
这种行为很不方便,我最好告诉tikz-external
它忽略所有\todo
。
我知道我通常可以禁用外部化\tikzset{external/export=false}
并仅为选定的图打开它,但反过来会更方便。
答案1
我之前也遇到过这个问题,只是因为命令\todo
(我从来不用\missingfigure
)。下面是我修复它的方法(把这个放在你的前言中,在todonotes
and tikz
/pgfplots
被调用的某个地方):
\makeatletter
\renewcommand{\todo}[2][]{\tikzexternaldisable\@todo[#1]{#2}\tikzexternalenable}
\makeatother
现在,\todo
将被外部化进程忽略。
因此,对于\missingfigure
您需要的命令
\makeatletter
\renewcommand{\missingfigure}[2][]{\tikzexternaldisable\@missingfigure[#1]{#2}\tikzexternalenable}
\makeatother
答案2
对我来说,这两个解决方案都不起作用。考虑到接受的答案获得了大量赞成票,这可能是平台相关的。
然而,mSSM 的方法与之\let
接近。它无法正常工作的原因\missingfigure
是后者消耗了一个可选参数。简单方法\let
无法将所有必需信息复制到新宏中。根据这件,应该使用letltxmacro包。最终,我的工作版本是:
\usepackage{letltxmacro}
\LetLtxMacro{\oldmissingfigure}{\missingfigure}
\renewcommand{\missingfigure}[2][]{\tikzexternaldisable\oldmissingfigure[{#1}]{#2}\tikzexternalenable}
\LetLtxMacro{\oldtodo}{\todo}
\renewcommand{\todo}[2][]{\tikzexternaldisable\oldtodo[#1]{#2}\tikzexternalenable}
答案3
我已经尝试过\missingfigure
,但是简单的\renewcommand{\missingfigure}...
方法不起作用,正如@Frits 的回答所示。
我发现的唯一解决方案是定义一个新命令:
\newcommand{\extmissingfigure}[2][]{\tikzexternaldisable\missingfigure[#1]{#2}\tikzexternalenable}
使用\let
,即:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\usepackage{todonotes}
\tikzexternalize
\let\oldmissingfigure\missingfigure
\renewcommand{\missingfigure}[2][]{\tikzexternaldisable\oldmissingfigure[#1]{#2}\tikzexternalenable}
\begin{document}
\missingfigure{Ah!}
\end{document}
不幸的是引发了一个错误:
! TeX capacity exceeded, sorry [input stack size=5000].
<to be read again>
\tikzexternal@orig@tikzfadingfrompicture
l.18 \missingfigure{Ah!}
答案4
我找到了另一种解决方法,它只是修改了命令的原始实现todo
。只需修改
\newcommand{\todo}[1]{%
% Add to todo list
\addcontentsline{tdo}{todo}{\protect{#1}}%
%
\begin{tikzpicture}[remember picture, baseline=-0.75ex]%
\node [coordinate] (inText) {};
\end{tikzpicture}%
%
% Make the margin par
\marginnote{%
\begin{tikzpicture}[remember picture]%
\definecolor{orange}{rgb}{1,0.5,0}
\draw node[draw=black, fill=orange, text width = 3cm] (inNote)
{#1};%
\end{tikzpicture}%
}%
%
\begin{tikzpicture}[remember picture, overlay]%
\draw[draw = orange, thick]
([yshift=-0.2cm] inText)
-| ([xshift=-0.2cm] inNote.west)
-| (inNote.west);
\end{tikzpicture}%
%
}%
\tikzexternaldisable
通过在环境之前和\tikzexternalenable
之后插入tikzpicture
:
\newcommand{\todo}[1]{%
\tikzexternaldisable
% Add to todo list
\addcontentsline{tdo}{todo}{\protect{#1}}%
%
\begin{tikzpicture}[remember picture, baseline=-0.75ex]%
\node [coordinate] (inText) {};
\end{tikzpicture}%
%
% Make the margin par
\marginnote{%
\begin{tikzpicture}[remember picture]%
\definecolor{orange}{rgb}{1,0.5,0}
\draw node[draw=black, fill=orange, text width = 3cm] (inNote)
{#1};%
\end{tikzpicture}%
}%
%
\begin{tikzpicture}[remember picture, overlay]%
\draw[draw = orange, thick]
([yshift=-0.2cm] inText)
-| ([xshift=-0.2cm] inNote.west)
-| (inNote.west);
\end{tikzpicture}%
\tikzexternalenable
%
}%