tikzexternalize,列表并制作,待更新的图表列表

tikzexternalize,列表并制作,待更新的图表列表

我在 Windows 上使用 tikz 的 externalize 库。由于我的文档包含带有 的图形\ref,因此我需要使用list and make而不是convert with system call。由于我在 Windows 上工作,因此我无法使用make main.makefile,正如报告的那样在这个问题中

发出正确的系统调用不是问题。但是,我不知道如何找出哪些图形需要更新,因为main.figlist似乎总是列出所有图形。externalize显然,在发出系统调用之前会检查图形是否需要更新,我相信 makefile 中也包含类似的内容。不幸的是,我不知道 makefile 是如何工作的。有没有办法手动发出此检查,或者我可以获得过期图形的列表?

生成的 makefile 如下所示:

ALL_FIGURE_NAMES=$(shell cat thesis.figlist)
ALL_FIGURES=$(ALL_FIGURE_NAMES:%=%.pdf)

allimages: $(ALL_FIGURES)
    @echo All images exist now. Use make -B to re-generate them.

FORCEREMAKE:

include $(ALL_FIGURE_NAMES:%=%.dep)

%.dep:
    mkdir -p "$(dir $@)"
    touch "$@" # will be filled later.

fig-0.pdf: 
pdflatex -enable-write18 -halt-on-error -interaction=batchmode -jobname "fig-0" "\def\tikzexternalrealjob{main}\input{main}"

fig-0.pdf: fig-0.md5

编辑tikz-externalize确实收集了图形是否最新的信息。这是显而易见的,因为在完整运行之后,如果存在未更新的图形,它会发出警告。此​​外,如果将 externalize 设置为convert with system call,则仅更新那些已过时的图形。因此,tikz 必须有一种方法来调用类似 md5 检查的东西。因此,除了创建过时图形列表之外,是否有办法使用手动 pdflatex 命令来调用此最新检查?简单地说,类似于pdflatex -jobname=figure0 --check-md5?我非常乐意开始手动更新图形,但创建全部每次我改变一个数字时 - 说得客气一点 - 都很耗时...我想一定有一个适用于 Windows 的解决方案吧?

我查看了 tikz-externalize 文件,但我的 tex 还不够好......

编辑2:我意识到我没有把问题表达清楚,或者也许没有表达清楚我提出问题的动机。我的文档包括一些tikz 图片,其中许多图片的创建非常耗时。我已将 tikzexternalize 配置为连续编号文档中的所有图片。因此,我可以手动调用pdflatex -jobname=figure0 ...,并且 pdflatex 以某种方式找到了正确的 tikz 代码,尽管 tikzfiles不是命名figure0.tikz等等。除非我找出外部化魔法发生的地方,否则我真的无法进行手动 md5 检查。这让我有以下选择:

  • 理解魔法(可能不会很快发生)
  • 找到一种方法在排版之前调用 tikze-md5check
  • 找到一种方法来获取过期数据的列表

答案1

这里可能解决手头的问题,尽管我可能忽略了一些要点。

首先,你“需要使用list and make而不是convert with system call”的基本假设已经过时了:一些不错的版本(*)的externallib附带支持用于\ref图片内部依赖于默认convert with system call。解决方案基于对图像包含未定义引用的检测。然后它将一些特殊标记写入图像.dpth文件。稍后,将读取此标记并在 期间重新转换图像\end{document},假设引用可用。

因此,解决“我需要处理\ref外部图像”问题的一个方法可能是更新到合适的external库版本并使用convert with system call。这样的合适版本可能随附pgfplots,即

\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize

可能会奏效。

(*)在撰写本文时,“体面的版本”需要得到适当的定义:

  1. external当前稳定的 PGF 3.0.1a 中附带并记录的库确实不是包含所提到的特征。
  2. external随附了该库的副本pgfplots。这是总是至少与 PGF 附带的版本一样新。在撰写本文时,它更新,并附带上述功能。如果您编写\usepgfplotslibrary{external},代码会检查 PGF 中可用的版本是否恰好更新。如果是,则将使用 PGF 的版本。如果不是,pgfplots则将使用随附的副本。最终,两者将同步,但 PGF 的发布周期要长得多。这意味着您总是最好使用\usepgfplotslibrary{external}(以加载 为代价pgfplots)。

也就是说,如果你想知道由于 MD5 更改而需要重新制作哪些图形,你可以检查文件fig-0.pdf是否较旧比文件fig-0.md5

请注意

fig-0.pdf: fig-0.md5

在 Makefile 中执行同样的操作。并且,.md5当且仅当 MD5 发生变化时,在主文件上运行 LaTeX 才会更新文件。

答案2

我已经成功使用 Windows 7(最近使用 Windows 10)好几年tikz externalizationmode = list-and-make

我无法发表评论(积分不够),因此我给出这个答案,希望能解决一些误解,例如

由于我在 Windows 上工作,因此无法使用 make main.makefile,正如在这个问题

链接的问题是基于作者的想法而关闭的

看来只有我有这个问题。

(我想我也遇到过相同或类似的问题)。

cat在我看来,罪魁祸首是Linux 和 Windows 上默认命令的行为不同:一个变体在连接之间放置一个空格,另一个变体生成一个换行符(我不记得哪个做了什么)。我安装了RToolsRTools在 Windows 系统路径上将相关组件放在前面)这样catWindows 上的命令就变成了像 linux 版本一样运行(我遇到了一些不明白的问题),与和cygwin相关的问题(在封闭的链接问题中提到)得到了解决,一切正常。(我一直在 Windows 上使用来处理、和类的文档,唯一的问题是我无法让类作为引擎一起工作(必须坚持使用),这是一个不同的问题)。main.makefilemain.figlistexternalizationmode = list-and-makebeamerarticletufte-handouttuftelualatexexternalizationpdflatex

相关内容