环境

环境

我有一个很长的文档,其中包含大量 TikZ 图形,但编译起来非常慢。

有没有具体蒂克兹您能向我推荐一些技巧/好的做法,以便我可以编写不需要花费太多时间编译的图表吗?

我知道 TikZexternal库,但它会触发难以解决的依赖/重新编译问题(恕我直言)。此外,文档越大,就越容易忽略某个图未按预期重新编译。

例如,TikZ API 中是否有某些部分的速度非常慢?

答案1

我和楼主有类似的感受,觉得外部化解决方案很好,但肯定不是完美的。例如,除了楼主指出的缺点之外,我想补充两个问题:

  1. 如果在文档中间某处插入一个新图形,那么tikz将重新构建所有后续图形,尽管它们没有改变。
  2. 编辑图像有点烦人。您不想将tikz图像作为大型文档的一部分进行编辑。

我对该软件包不够熟悉standalone,因此我无法真正判断,但如果我理解正确的话,它不会避免在编译主文档时编译所有图像。

以下是我尝试实现的一个想法的概述。到目前为止,它还没有奏效,但它可能对其他人来说是一个想法……

环境

假设您有以下结构:

- project
|- main.tex
|- tikz-images
   |- tikz1.tex
   |- tikz2.tex

并使用 进行构建latexmk

主意

将图像转换tikzstandalone文档,使用 构建其对应的 pdfmake并将pdf(!) 包含在文档中。这样,每当tikz创建新图像时,您需要做的就是将目标添加到makefiletikz-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.pdfproject将首先构建tikz图像(如果它们被更改或者丢失),然后latexmk再处理其余部分。

这种方法一旦全面实施,将具有两大优点:

  1. 可以更快速地冲洗照片,并且无论主文档是什么都可以冲洗。因此,速度更快。
  2. 由于它仅包含现成的 PDF,因此文档的构建也可以更快。

问题:

  1. makefile正如我提到的,完成项目的实施。
  2. externalization库的其中一个最重要的好处tikz是,您可以获得相同的图像设置(例如字体)。要使建议的方法也能实现这一点,必须采取一些措施。
  3. 改善makefile图像tikz

答案2

这一页您可以找到一个合适的解决方案,该解决方案使用上述评论中提到的图像外部化,并描述了这种方法的优点,例如更快的编译以及更容易的重用和版本控制。

答案3

我刚打开了两个文档。我查看了 tikzpicture 在单独文档中是否正常,如果正常,我就将其用于最终文档中。

相关内容