使用forest
包来获取简单的真值树,但我想将其外部化,因为真值树有很多。以下是代码示例:
\documentclass{article}
\usepackage[external]{forest}
\tikzexternalize
\begin{document}
\begin{forest}
[$B \rightarrow C$
[$C$
[$\neg A$
[$\neg B$
]
[$C$
]
]
[$B$
[$\neg B$
]
[$C$
]
]
]
]
\end{forest}
\end{document}
错误如下:
Command Line: texify.exe --src --tex-option=--interaction=errorstopmode
--tex-option=--synctex=-1
.....
ABD: EveryShipout initializing macros forest: Invoking a recursive call to
generate the external picture 'Test2-fores t-1' for the following
context+code: 'dj,8.39996pt,0.4pt,.3333em,.5\pgflinewidt h
,.3333em,.5\pgflinewidth @@ [$B \rightarrow C$ [$C$ [$\neg A$ [$\neg B$ ] [$C
$ ] ] [$B$ [$\neg B$ ] [$C$ ] ] ] ] ' ! Undefined control sequence.
\forest@temp ->\path
[draw]([email protected] anchor)--([email protected] anchor);
l.24 \end{forest}
? x No pages of output. Transcript written on Test2.log. texify: latex failed
for some reason (see log file).
如果我注释掉,一切都会正常工作\tikzexternalize
。
答案1
这确实是一个错误,感谢您发现它!
begin draw
我在引入键和时在 v1.03 中引入了错误end draw
。(键背后的想法是能够自定义tikzpicture
整个文档中使用的环境,甚至使用除了tikz
绘制树之外的其他东西。)
出现此错误的原因是,上一个\tikz
命令被一对 和 替换\pgfkeysalso{/forest/begin draw}
,\pgfkeysalso{/forest/end draw}
默认为\begin{tikzpicture}
和\end{tikzpicture}
。在处理 的扩展时\begin{tikzpicture}
,tikz
的外部化宏正在寻找 来\end{tikzpicture}
收集图片环境。但是,\end{tikzpicture}
隐藏在 的扩展中\pgfkeysalso{/forest/end draw}
,因此无法找到。我已通过提前扩展键来更正此问题。(我还修复了在此过程中发现的另一个错误,在 中\forest@externalizing@maybeoptimize
。)
修正版本暂时可以找到这里。如果它有效,请告诉我。如果有效,我会尽快将新版本发布到 CTAN。
pgf
关于/的外部化机制的附注tikz
。虽然我发现它总体上非常方便,但我需要对其进行破解才能使用它,而生成的代码看起来像黑魔法。(我不敢想象新版本的/forest
需要进行哪些调整。)在处理这个问题时,我对如何让包编写者更容易使用它(也包括不使用/的包)有一些想法,最重要的是,如何使用多页 PDF 使其速度大大加快。那么,问题来了:大家对这样的新版本感兴趣吗?pgf
tikz
pgf
tikz
答案2
我同意这看起来像是一个错误。正如@Qrrbrbirlbel 提到的,tikzpicture
使用该选项时环境设置不正确external
,因此编译器无法识别 tikz 命令,例如\path
。
我通过更改包代码中的以下几行来编译该示例forest
:
%% Old
\pgfkeysalso{/forest/begin draw}%
...
\pgfkeysalso{/forest/end draw}%
到
%% New
\begin{tikzpicture}
...
\end{tikzpicture}
也许有人可以帮助理解为什么仅在external
设置该选项时才会出现此错误,并提出更好的解决方案。
这是可以运行的另一个版本。(注意:需要使用以下命令进行编译:pdflatex -shell-escape file.tex
。)
\documentclass{article}
\usepackage[external]{forest2}
\tikzexternalize
\begin{document}
\begin{forest}
[$B \rightarrow C$
[$C$
[$\neg A$
[$\neg B$
]
[$C$
]
]
[$B$
[$\neg B$
]
[$C$
]
]
]
]
\end{forest}
\end{document}