MWE 用于 tikz 图形修改后的外部化 + 自动重新编译

MWE 用于 tikz 图形修改后的外部化 + 自动重新编译

我使用该external库是为了避免在大型文档中不必要地重新编译 tikz 图形。有时我必须更改某些选定图片的某些细节。修改后,只需重新编译已修改的图形。我的目标是自动完成此操作。

摘自 Christian Feuersänger 的回答这个问题,我将其解释为内容更改的图片可以自动重新制作。但是,我还没有找到一个简单的 MWE,其中 tikz 图形仅在其内容更改时才重新编译。有一个会很有用。

以下 MWE 不起作用,因为 figure.tikz 中的更改不会触发图形的重新编译。

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzexternalize[prefix=tikz2pdf/]

\begin{document}
\begin{figure}
  \tikzsetnextfilename{figure}
  \input{figure.tikz}
\end{figure}
\end{document}

图形.tikz

\begin{tikzpicture} 
\draw (0,0) -- (1,0);
\end{tikzpicture}

从 pdflatex 的日志中我可以看到

===== Image 'tikz2pdf/figure' is up-to-date. ======

这表明检查是否最新的文件是生成的 pdf,而不是原始的 tikz。显然我遗漏了一些东西。

我如何指定要检查的文件是原始 tikz?

对于背景,我使用 pdflatex 和 tikz/pgf 2.10。

答案1

为了在图片内容被修改时自动重新创建文件,您必须安装比 2.10 更新的 PGF 版本。

在撰写本文时,这意味着您需要 (a) 等待下一个稳定版本或 (b) 使用不稳定版本。您可以通过 CSV 获取一个。有时会准备好一个并在http://www.texample.net/tikz/

答案2

有人在这里 (TikZ externalize 无法识别更改) 已经发布了一个替代解决方案,该解决方案基于一个自制的例程,可以比较修改日期,并且只要图形存储在单独的文件中,它就可以与 pdftex 很好地配合使用。

但是,如果您使用 xetex,则 '\pdffilemoddate' 不可用。我的解决方案(基于上面链接的解决方案)是将以下内容添加到序言中:

\tikzexternalize[prefix=ext-figures/]
\tikzset{external/system call={%
xelatex \tikzexternalcheckshellescape
-halt-on-error -shell-escape -interaction=batchmode
-jobname "\image" "\texsource"}}
%delete external pdf if old
\newcommand{\deloldext}[2]{%  
   \immediate\write18{./deloldext.pl '#1' '#2'}
}
%include tikz file and call \deloldext
\newcommand{\includetikz}[1]{%
    \tikzsetnextfilename{#1}%
    \deloldext{#1.tikz}{ext-figures/#1.pdf}%
    \input{#1.tikz}%
}

调用perl 脚本deloldext.pl并比较 #2(pdf)和 #1(tikz)的修改日期并删除较旧的 pdf:

#!/usr/bin/env perl
use strict;
use File::stat;
my $syntax = "Syntax: $0 <file> <file>\n";
@ARGV == 2 or die $syntax;
chomp(my $file1 = shift);
chomp(my $file2 = shift);
-f $file1 or die "File not found ($file1)!\n";
-f $file2 or die "File not found ($file2)!\n";
if ((stat($file1)->mtime)>(stat($file2)->mtime))
{
unlink($file2)
}
__END__

所有外部源文件都必须命名为 *.tikz,如果它们存储在子文件夹中,则文件夹必须具有相同的文件夹结构ext-figures(否则将无法在那里存储 pdf)

在文档中包含一个 tikz,现在只需输入:

\begin{figure}
\centering
\includetikz{tex/3_model/loci}
\caption{Indifference Loci in an [\(\theta_i, r\)]-plane for given \(r_i\)}
\end{figure}

答案3

通过添加选项tikzexternalize

\tikzexternalize[up to date check=diff,some other options]

该软件包将覆盖默认的 md5 检查,从而绕过 md5 不更新的问题。至少在我的计算机上,图片将以这种方式更新。

相关内容