Tikz 外部化和全局参数:无更新

Tikz 外部化和全局参数:无更新

考虑通过以下TikzExample.tex示例进行编译pdflatex -shell-escape TikzExample

\documentclass{article}    
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize

\definecolor{Diag}{cmyk}{0.84,0,0.05,0.40}

\begin{document}
\begin{figure}[ht]
\centering
\tikzsetnextfilename{figure1}
\input{figure1tikz.tex}
\end{figure}

\begin{figure}[ht]
\centering
\tikzsetnextfilename{figure2}
\input{figure2tikz.tex}
\end{figure}
\end{document}

哪里figure1tikz.tex

\begin{tikzpicture}
\draw[fill=Diag!50] (0,0) rectangle (1,1);
\draw (0,0) -- (1,1);
\end{tikzpicture}

并且figure2tikz.tex是:

\begin{tikzpicture}
\draw[fill=red!50] (0,0) rectangle (1,1);
\draw[Diag,line width=2pt] (0,0) -- (1,1);
\end{tikzpicture}

如果更改了上述 tikz 图片,则编译主文档将更新图表。很好!但是,更改全局颜色Diag对新编译没有影响。考虑到外部化的工作方式,这是有道理的,即如果 tikz 文件比主文档新,则重新编译 tikz 文件。我们如何要求系统重新编译所有受Diag上述颜色等全局参数影响的图表?我认为一种解决方案是删除所有相应的 pdf,但这并不理想。

答案1

\meaning您可以让生成的文件名依赖于您想要用作依赖项的任何宏的哈希值。对于颜色,您可以使用内部宏\csname\string\color@<color-name>\endcsname

请注意,如果你改变颜色,生成的文件也会改变,但它不会清理和删除旧文件,因此你会积累

figure1-31D7BEC4791629B82ADF280BFE7B3E1E.pdf
figure1-334FBFF45DDEC5AE00C91FC51A840D48.pdf

除非您定期删除它们。

在此处输入图片描述

\documentclass{article}    
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize


\definecolor{Diag}{cmyk}{0.84,1,0.05,0.40}

\edef\Diagsum{\pdfmdfivesum{\expandafter\meaning\csname\string\color@Diag\endcsname}}


\begin{document}
\begin{figure}[ht]
\centering
\tikzsetnextfilename{figure1-\Diagsum}
\input{figure1tikz.tex}
\end{figure}

\begin{figure}[ht]
\centering
\tikzsetnextfilename{figure2-\Diagsum}
\input{figure2tikz.tex}
\end{figure}
\end{document}

相关内容