我很难让 TikZ externalize 和 Forest 很好地发挥作用。以下是 MWE(text.tex
):
\documentclass{article}
\usepackage[external]{forest}
\tikzexternalize
\tikzset{
external/system call={
xelatex \tikzexternalcheckshellescape -halt-on-error -interaction=nonstopmode -jobname
"\image" "\texsource"
}
}
\begin{document}
\begin{forest}
[a
[b]
[c]
]
\end{forest}
\end{document}
我通过调用 进行编译latexmk -xelatex -pvc test.tex --shell-escape
。第一次,一切正常:我得到了一个 pdf 输出,并且树被外部化为其自己的 pdf。但是,所有后续编译都失败,并出现以下错误:
! Argument of \tikzexternal@externalizefig@systemcall@uptodatecheck has an extra }.
<inserted text>
\par
l.17 \end{forest}
?
我正在使用 xelatex,但 pdflatex 编译时出现相同的错误。
该问题似乎是由于 Forest 和 TikZ 的相互作用造成的:用 tikzpicture 环境替换 MWE 中的森林环境无法重现错误。
我使用的是 MacTeX-2015 和 pgf 版本 3.0.0,以及最新版本的 Forest(tlmgr 如此表示)。感谢您提供的任何帮助。
编辑(由 cfr 添加)
我可以用以下最小示例重现该问题
\documentclass{article}
\usepackage[external]{forest}
\tikzexternalize
\begin{document}
\begin{forest}
[a[b][c]]
\end{forest}
\end{document}
pdflatex --shell-escape
几个小时前在 GNU/Linux 上更新了 TeX Live 2015 。
第二次编译时的错误是:
(./prawf3.for)
! Argument of \tikzexternal@externalizefig@systemcall@uptodatecheck has an extr
a }.
<inserted text>
\par
l.13 \end{forest}
Gonzalo Medina 可以重现这一点。
答案1
此错误是由于 的内部变化造成的pgf
。
forest
您能否确认将以下代码添加到序言中可以解决您的问题。如果可以,我会在 ctan 上发布新版本。
\makeatletter
\def\forest@includeexternal@check#1{%
\tikzsetnextfilename{#1}%
\IfFileExists{\tikzexternal@filenameprefix/#1}{\tikzexternal@file@isuptodatetrue}{\tikzexternal@file@isuptodatefalse}%
}
\makeatother
道歉#1:我知道依赖其他包的内部结构是不好的做法,但是没有其他方法可以使外部化发挥作用……
道歉#2:我已将此修复程序包含在forest
我正在准备的新版本中,但忘记将其包含在旧版本的补丁中。