编辑(由 cfr 添加)

编辑(由 cfr 添加)

我很难让 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我正在准备的新版本中,但忘记将其包含在旧版本的补丁中。

相关内容