多行森林节点与表格之间的奇怪不兼容性

多行森林节点与表格之间的奇怪不兼容性

以下 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(例如tabularflushleft):\typeout{\\}在这样的环境中使用它会产生奇怪的错误。

上述工作示例之所以有效,是因为有问题的语句(在v1.09 中)仅对只有一个子节点的节点\typeout运行。forest

相关内容