Tikz 在草稿模式下外部化

Tikz 在草稿模式下外部化

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

我正在写一篇很长的文档,编译需要时间。一些图以 tikz 格式包含(从 matlab2tikz 导出),其他图像则直接包含在内\includegraphics。我使用的是 latex -> dvips -> ps2pdf 工作流程。为了加快速度,文档处于草稿模式(大多数情况下,我对查看所有图像不感兴趣)。为了加快 tikz 速度,外部化工作正常。

然而,正如Tikz externalize 中的草稿模式会隐藏图形,但没有 externalize 则不会,tikz-draft 导致框变小。原始图形大小似乎丢失,文档开始移动很多。

我收到警告:

Package pgf Warning: Missing width for image "pgflastimage" ("images/tikz/figure8") in draft mode.
(pgf)                Using 1cm instead on input line 980.

Package pgf Warning: Missing height for image "pgflastimage" ("images/tikz/figure8") in draft mode.
(pgf)                Using 1cm instead on input line 980.

结果只是一个小盒子。它似乎正在尝试找到正确的盒子大小,但失败了。有没有办法解决或修复这个错误?

我的外化是通过

\tikzset{external/system call={latex \tikzexternalcheckshellescape -halt-on-error 
-interaction=batchmode -jobname "\image" "\texsource" &&
dvips -o "\image".ps "\image".dvi && ps2eps "\image".ps;}}

可生成优质的 .eps 图像。生成的图像质量很好,并且当手动添加时,框的大小也正确\includegraphics{figure0.eps}


以下是一种可能的破解方法。首先,我\subimport{path}{filename.tikz} 根据包将我的图表与子目录一起放入import

基于这个想法,我开始用包含以下内容替换此\tikzimport{path}{filename.tikz}导入

\newcommand{\tikzimport}[2]{%
\ifdraft{%
  % create counter, increment
  \newstepcounter{\pgfkeysvalueof{/tikz/external/figure name}}%
  % define next filename of externalized tikz file
  \def\mynextfile{images/tikz/%
  \pgfkeysvalueof{/tikz/external/figure name}%
  \arabic{\pgfkeysvalueof{/tikz/external/figure name}}.eps}%
  % check is file is there, then includegraphics the file
  % as we are in draft, this gives a nice box
  \IfFileExists{\mynextfile}{% show tikz
  \includegraphics[scale=1]{\mynextfile}}{% fallback
  \mbox{\nolinkurl{\mynextfile}}
}
}{% nodraft
  \subimport{#1}{#2}%
}

这需要ifdraft包和每个后缀的计数器figure name。创建计数器(如果不存在)可以通过以下方式实现

\makeatletter
\def\newstepcounter#1{%
\@ifundefined{c@#1}{%
\newcounter{#1}}{%
\stepcounter{#1}}%
}
\makeatother

问题

  • 这实在不太好……

  • tikz 外部化前缀是硬编码的,我不知道如何从 tikz 内部提取前缀。前缀由设置,\tikzexternalize[prefix=images/tikz/]\pgfkeys{/tikz/external/prefix}返回为空

  • 我有一些图形没有被外部化,因为如果被外部化,它们会返回错误。如果每个图形都启用了外部化,那么每次调用时都进行测试会很好。

我累了

\newif\isexternal
\pgfkeys{/tikz/external/export/.is if=isexternal}
\isexternal
  external
\else
  not external
\fi

但这个测试的结果总是错误的。

相关内容