我有一个很长的文档,其中包含大量 TikZ 图形,但编译起来非常慢。
有没有具体蒂克兹您能向我推荐一些技巧/好的做法,以便我可以编写不需要花费太多时间编译的图表吗?
我知道 TikZexternal
库,但它会触发难以解决的依赖/重新编译问题(恕我直言)。此外,文档越大,就越容易忽略某个图未按预期重新编译。
例如,TikZ API 中是否有某些部分的速度非常慢?
答案1
我和楼主有类似的感受,觉得外部化解决方案很好,但肯定不是完美的。例如,除了楼主指出的缺点之外,我想补充两个问题:
- 如果在文档中间某处插入一个新图形,那么
tikz
将重新构建所有后续图形,尽管它们没有改变。 - 编辑图像有点烦人。您不想将
tikz
图像作为大型文档的一部分进行编辑。
我对该软件包不够熟悉standalone
,因此我无法真正判断,但如果我理解正确的话,它不会避免在编译主文档时编译所有图像。
以下是我尝试实现的一个想法的概述。到目前为止,它还没有奏效,但它可能对其他人来说是一个想法……
环境
假设您有以下结构:
- project
|- main.tex
|- tikz-images
|- tikz1.tex
|- tikz2.tex
并使用 进行构建latexmk
。
主意
将图像转换tikz
为standalone
文档,使用 构建其对应的 pdfmake
并将pdf
(!) 包含在文档中。这样,每当tikz
创建新图像时,您需要做的就是将目标添加到makefile
中tikz-images
。
latexmk
问题将出现在使用谁不会(!) 意识到 的变化的编译上tikz1.tex
。
执行
首先,中的文件tikz-images
应具有扩展名.tikz
,保留.tex
扩展名以便在所有图形源代码中包含通用前言。这将帮助您保持与主文档相同的字体和公司设置。然后,在中project
创建以下内容makefile
:
TIKZDIR = tikz-figures
TIKZ_FILES = $(wildcard $(TIKZDIR)/*.tikz)
PDFTIKZ_FILES = $(patsubst %.tikz,%.pdf,$(TIKZ_FILES))
$(TIKZDIR)/%.pdf: $(TIKZDIR)/%.tikz $(TIKZDIR)/common-preamble.tex
cd $(TIKZDIR); \
pdflatex $$(basename $<)
.PHONY : FORCE_MAKE
all : main.pdf
main.pdf : main.tex FORCE_MAKE ${PDFTIKZ_FILES}
latexmk main.tex
这样,调用make main.pdf
时project
将首先构建tikz
图像(如果它们被更改或者丢失),然后latexmk
再处理其余部分。
这种方法一旦全面实施,将具有两大优点:
- 可以更快速地冲洗照片,并且无论主文档是什么都可以冲洗。因此,速度更快。
- 由于它仅包含现成的 PDF,因此文档的构建也可以更快。
问题:
makefile
正如我提到的,完成项目的实施。externalization
库的其中一个最重要的好处tikz
是,您可以获得相同的图像设置(例如字体)。要使建议的方法也能实现这一点,必须采取一些措施。- 改善
makefile
图像tikz
。
答案2
在这一页您可以找到一个合适的解决方案,该解决方案使用上述评论中提到的图像外部化,并描述了这种方法的优点,例如更快的编译以及更容易的重用和版本控制。
答案3
我刚打开了两个文档。我查看了 tikzpicture 在单独文档中是否正常,如果正常,我就将其用于最终文档中。