编辑

编辑

我想使用 beamer 的\only 里面森林树木。想象一下这样的 MWE:

\documentclass{beamer}
\usepackage{forest}
\begin{document}

\frame{\frametitle{test}

\only<1>{
\Forest{
  [,phantom
    [S [NP [N [I]]]]
    [S [V [wrote]]]]
}}

\only<2>{
\Forest{
  [S
    [NP [N [I]]]
    [V [wrote]]]
}}

}
\end{document}

其结果为两个覆盖:

在此处输入图片描述

相反,我想嵌入\only如下\Forest代码来做同样的事情:

\Forest{
  [,phantom
    [S,only=<1> [NP [N [I]]]]
    [S,only=<1> [V [wrote]]]
    [S,only=<2>
      [NP [N [I]]]
      [V [wrote]]]]
}

是否可以?

我见过类似的提议这里这里,但它们似乎不符合我的要求。

答案1

我不确定这是否是明智的做法:是一棵树还是两棵树?如果你要用一棵树替换另一棵树,我会使用两棵树;如果不是,我会尝试保持一棵树的公共部分是公共的。

尽管如此,用你想要的语法实现一种风格还是相当简单的。因此,作为一个假设的练习,我不建议在现实世界中应用,这里有一种方法可以做到这一点。

\documentclass{beamer}
\usepackage{forest}
\forestset{%
  only/.code args={<#1>}{%
    \alt<#1>{}{\pgfkeysalso{before typesetting nodes={remove}}}
  },
}
\begin{document}
\begin{frame}{Another test}
  \Forest{
    [,phantom
      [S,only=<1> [NP [N [I]]]]
      [S,only=<1> [V [wrote]]]
      [S,only=<2>
        [NP [N [I]]]
        [V [wrote]]]]
  }
\end{frame}
\end{document}

只有一棵树还是只有两棵树?

编辑

这里有另一种选择,我认为它允许您以更清晰的方式指定树。

\begin{frame}<1-2>{Yet Another test}
  \Forest{
    [S, adopt grandchildren=<2>
      [S [NP [N [I]]]]
      [S [V [wrote]]]
      ]
  }
\end{frame}

adopt grandchildren,如这里所述,收养所有孙辈,消灭所有子女(在深夜)并切换到phantom收养之前。

幻灯片 2 上的收养……和谋杀

这是否正是您想要的还值得怀疑,但我认为,允许代码反映树的结构的方法是更好的选择,即使需要花更多的心思来为您的工作流程精确地设计正确的工具。

\documentclass{beamer}
\usepackage{forest}
\forestset{%
  alt/.code args={<#1>#2#3}{%
    \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
  },
  define long step={grandchildren}{style}{branch={children,children}},
  adopt grandchildren/.style args={<#1>}{
    alt=<#1>{
      before typesetting nodes={
        tempkeylista=,
        for grandchildren={tempkeylista+/.option=name},
        split register={tempkeylista}{,}{append},
        for children=remove,
      },
    }{phantom}
  },
}
\begin{document}
\begin{frame}<1-2>{Yet Another test}
  \Forest{
    [S, adopt grandchildren=<2>
      [S [NP [N [I]]]]
      [S [V [wrote]]]
      ]
  }
\end{frame}
\end{document}

相关内容