使用 tikz externalize 时定义依赖项

使用 tikz externalize 时定义依赖项

在我的文档开头,我有\input{tikzcommands}一个tikzcommands.tex包含我想在 TikZ 图片中使用的全局设置的文件。例如,在这个文件中,我定义了一些样式。

问题是,当使用该externalize库时,它无法识别何时发生了变化tikzcommands.tex。我试图\tikzpicturedependsonfile{tikzcommands.tex}在 TikZ 环境开始时添加类似的内容,但没有帮助。

figureA.tex使(包括使用input)依赖于设置文件的正确方法是什么tikzcommands.tex

编辑: 由于@Psirus 的评论,我知道我做错了什么。但我仍然无法实现所需的行为,即使尝试使用mode=list and make。这是我最初的伪 MWE。

首先,我加载TikZ

\usepackage{tikz}
\usetikzlibrary{snakes,calc,decorations.pathreplacing,patterns}

然后,我有以下内容

\makeatletter
\IfFileExists{tikzexternal.sty}
{%
  \usetikzlibrary{external}%
  \tikzexternalize%
  \tikzsetexternalprefix{figures/cache/}%
  \renewcommand{\todo}[2][]{%
    \tikzexternaldisable\@todo[##1]{##2}\tikzexternalenable}%
}%
{%
  % Empty else case
}%
\makeatother

检查是否externalize可用。这部分我必须使代码与pgf不支持该externalize软件包的旧发行版兼容。

然后我有一个包含文件tikzcommands.tex,其中包含(除其他外)

\tikzset{
        robot/.style={thick,fill=green!#1},
        obstacle/.style={fill=red!80,thick}
}

最后,在文档主体中我有input以下形式的内容:

\input{./figures/figureA} 

figureA我使用样式robotobstacle

我希望以这样的方式使用 externalize,即使我只是更改文件,tikzcommands.tex依赖于该文件的数字也会被重新编译。

我理解我必须:

  1. 改变包的加载externalize
  2. 在每个之前添加一些内容input,这取决于tikzcommands.tex
  3. 可能会改变构建工作流程。目前我latexmk一个人在使用。

我尝试了几种组合,但都不起作用。我希望有人能画出实现这一目标的方法。

答案1

首先,我不知道latexmk,所以我的解决方案不能很好地集成,但我想你可以将我的粗略方法Makefile应用于你的latexmk逻辑。

主要文件在这里main.tex

\documentclass{scrartcl}

\usepackage{tikz}

\makeatletter
\IfFileExists{tikzexternal.sty}
{%
  \usetikzlibrary{external}%
  \tikzset{external/mode=list and make}
  \tikzexternalize%
  \tikzsetexternalprefix{figures/cache/}%
}%
{%
  % Empty else case
}%
\makeatother

\input{tikzcommands}

\begin{document}
    \input{./figures/figureA}
\end{document}

现在不再直接生成图片,而是为图像pdflatex编写一个。在图片文件中设置对的依赖关系:main.makefiletikzcommands.texfigure/figureA.tex

\begin{tikzpicture}
    \tikzpicturedependsonfile{tikzcommands.tex}
    \draw[myRectangle] (0,0) rectangle (2,2);
\end{tikzpicture}

为了使示例完整,请使用以下虚拟示例tikzcommands.tex

\tikzset{
        myRectangle/.style={thick}
}

现在您可以开始make -f main.makefile制作图片,并且仅在其来源或tikzcommands.tex更改时重建它们。一个非常粗略的Makefile做法是:

main.pdf: main.tex
    pdflatex main.tex;
    make -f main.makefile
    latexmk -pdf main.tex

但这只是pdflatex一次不必要的运行,而且确实显示了我对 的无知latexmk。我相信您可以将该行添加make -f main.makefilelatexmk逻辑中,以便在第一次传递 之后运行它pdflatex

相关内容