在我的文档开头,我有\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
我使用样式robot
和obstacle
。
我希望以这样的方式使用 externalize,即使我只是更改文件,tikzcommands.tex
依赖于该文件的数字也会被重新编译。
我理解我必须:
- 改变包的加载
externalize
。 - 在每个之前添加一些内容
input
,这取决于tikzcommands.tex
- 可能会改变构建工作流程。目前我
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.makefile
tikzcommands.tex
figure/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.makefile
到latexmk
逻辑中,以便在第一次传递 之后运行它pdflatex
。