我在 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
”的基本假设已经过时了:一些不错的版本(*)的external
lib附带支持用于\ref
图片内部依赖于默认convert with system call
。解决方案基于对图像包含未定义引用的检测。然后它将一些特殊标记写入图像.dpth
文件。稍后,将读取此标记并在 期间重新转换图像\end{document}
,假设引用可用。
因此,解决“我需要处理\ref
外部图像”问题的一个方法可能是更新到合适的external
库版本并使用convert with system call
。这样的合适版本可能随附pgfplots
,即
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize
可能会奏效。
(*)在撰写本文时,“体面的版本”需要得到适当的定义:
external
当前稳定的 PGF 3.0.1a 中附带并记录的库确实不是包含所提到的特征。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 externalization
了mode = list-and-make
。
我无法发表评论(积分不够),因此我给出这个答案,希望能解决一些误解,例如
由于我在 Windows 上工作,因此无法使用 make main.makefile,正如在这个问题,
链接的问题是基于作者的想法而关闭的
看来只有我有这个问题。
(我想我也遇到过相同或类似的问题)。
cat
在我看来,罪魁祸首是Linux 和 Windows 上默认命令的行为不同:一个变体在连接之间放置一个空格,另一个变体生成一个换行符(我不记得哪个做了什么)。我安装了RTools
(RTools
在 Windows 系统路径上将相关组件放在前面)这样cat
Windows 上的命令就变成了像 linux 版本一样运行(我遇到了一些不明白的问题),与和cygwin
相关的问题(在封闭的链接问题中提到)得到了解决,一切正常。(我一直在 Windows 上使用来处理、和类的文档,唯一的问题是我无法让类作为引擎一起工作(必须坚持使用),这是一个不同的问题)。main.makefile
main.figlist
externalization
mode = list-and-make
beamer
article
tufte-handout
tufte
lualatex
externalization
pdflatex