以下 MWE 编译得很好:
\documentclass{article}
\usepackage{forest}
\begin{document}
%\begin{tabular}{c}
\begin{forest}
[x\\y, align=center
[z]
]
\end{forest}
%\end{tabular}
\end{document}
但是,如果取消注释注释行,则会出现错误:
! Argument of \@firstoftwo has an extra }.
<inserted text>
\par
l.11 \end{forest}
错误在不同情况下并不一致。有时编译器会像这样抱怨:
Use of \@argarraycr doesn't match its definition.
另一方面,下面的代码——保留环境tabular
但删除多行节点下的节点——可以编译:
\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{tabular}{c}
\begin{forest}
[x\\y, align=center
%[z]
]
\end{forest}
\end{tabular}
\end{document}
有点奇怪的是,一周前我从未遇到过这种错误。我tlmgr
经常使用 进行更新,所以我猜是某个包中的某个更新导致了这个问题。但我不敢猜测是哪个。用 替换所有出现的\\
确实\protect\\
解决了错误,但这仍然似乎是一个错误,因为它是新行为。
答案1
这是 v1.09 中引入的一个错误forest
。该错误已在 v1.0.10 中修复,现已在 ctan 上提供。
这个错误是由于一个剩余的调试语句造成的,它发出一个\typeout
命令,该命令的参数\\
在上面不起作用的示例中包含(扩展后)。
现在,这通常不是问题:\typeout{\\}
在文档主体中使用它就没问题。但是,有些环境重新定义了\\
它,使其无法使用\typeout
(例如tabular
或flushleft
):\typeout{\\}
在这样的环境中使用它会产生奇怪的错误。
上述工作示例之所以有效,是因为有问题的语句(在v1.09 中)仅对只有一个子节点的节点\typeout
运行。forest