Tikz externalize 中的草稿模式会隐藏图形,但没有 externalize 则不会

Tikz externalize 中的草稿模式会隐藏图形,但没有 externalize 则不会

也许这是预期的行为,但手册中没有记录,这确实让我感到惊讶。

当您使用draft类选项并使用tikz external库时,所有 Tikz 图片都将被带有外部化图形名称的框替换。

梅威瑟:

\documentclass[draft]{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
\begin{tikzpicture}
  \draw (0,0) circle [radius=1];
\end{tikzpicture}
\end{document}

有草稿的结果

它显示正确的文件名这一事实使我认为这是external库在做这件事,因为虽然我知道它pgf本身对该选项做了类似的事情draft,但我并不指望它知道文件名(而且无论如何,我没有pgf直接加载,我认为它只有draft在直接调用时才会服从。)

但是,注释掉该\tikzexternalize行就可以得到如图所示的效果。

无草稿的结果

我并不是说这种行为通常没用!但是,这不是我所希望的,而且由于没有记录,我不知道我能做些什么。

我可以尝试解决这个问题,而不是使用它,draft但它在一个大文档中,该文档已经根据是否draft设置做了几件不同的事情。

我有什么选择?

答案1

针对根本问题提出了一个“解决方案”,基督教评论:

TikZ 确实不是用于\includegraphics外部化图形,如文档中所述,但\pgfimage{figure0.eps}。这不了解草稿模式。这可以在文档开头使用以下方法更改

\pgfkeys{/pgf/images/include external/.code=\includegraphics{#1}}

导致

\documentclass[draft]{article}
\usepackage{tikz}
\usetikzlibrary{external}

\pgfkeys{/pgf/images/include external/.code=\includegraphics{#1}}

\tikzexternalize
\begin{document}
\begin{tikzpicture}
  \draw (0,0) circle [radius=1];
\end{tikzpicture}
\end{document}

它以正确的尺寸呈现缺失图像的“草稿框”。

答案2

Documentclass[draft]选项:

使用可选参数[draft]\documentclass两个主要用途:

  • 通过边距中的竖线指示超出范围的水平盒子
  • 包含的图形外部的源不会显示(仅显示框的轮廓)。使用 可以实现类似的效果\usepackage[demo]{graphicx}

这对文档内的环境没有影响,tikzpicture因为文档内的环境不被视为外部图形。其内容被排版并显示在输出中,就像任何其他环境的内容一样。

TikZ 外部化库:

\usetikzlibrary[external]和相关函数的主要目的\tikzexternalize是通过将每个函数转换tikzpicture为单独的外部的图形,然后使用 导入\includegraphics。因此,您看到的行为。

\tikzexternaldisable可以通过在组内使用来根据每次使用情况禁用此功能:

{\tikzexternaldisable% disable within a group
\begin{tikzpicture}
  ...
\end{tikzpicture}
}

或者在之前禁用外部化tikzpicture,然后按照图片重新启用它:

\tikzexternaldisable% disable outside of a group
\begin{tikzpicture}
  ...
\end{tikzpicture}
\tikzexternalenable% should re-enable at end.

在存在嵌套tikzpicture环境的情况下可能需要禁用。

下面的 MWE 示例说明了这些并得出:

在此处输入图片描述

代码:

\documentclass[draft]{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}

{\tikzexternaldisable% disable within a group
\begin{tikzpicture}
  \draw [blue, ultra thick, fill=red!10] (0,0) circle [radius=1] node {1};
\end{tikzpicture}
}

\tikzexternaldisable% disbale outside of a group
\begin{tikzpicture}
  \draw [red, ultra thick, fill=blue!10] (0,0) circle [radius=1] node {2};
\end{tikzpicture}
\tikzexternalenable% should renable at end.

\begin{tikzpicture}
  \draw [black, ultra thick,fill=yellow!20] (0,0) circle [radius=1] node {3};
\end{tikzpicture}
\end{document}

相关内容