Tikz はドラフトモードで外部化します

Tikz はドラフトモードで外部化します

これは、Tikzのドラフトモードでは外部化によりグラフィックが非表示になりますが、外部化なしでは非表示になりません

長いドキュメントを書いているのですが、コンパイルに時間がかかります。一部のプロットは tikz (matlab2tikz からエクスポート) として含まれており、その他の画像は で単純に含まれています\includegraphics。latex -> dvips -> ps2pdf ワークフローを使用しています。スピードアップのため、ドキュメントはドラフト モードになっています (ほとんどの場合、すべての画像を見る必要はありません)。tikz のスピードアップのために、外部化はうまく機能します。

しかし、Tikzのドラフトモードでは外部化によりグラフィックが非表示になりますが、外部化なしでは非表示になりません、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

しかし、このテストは常に偽の結果を返します。

関連情報