使用 \only 在 beamer 中添加和删除 tikz-qtree 节点

使用 \only 在 beamer 中添加和删除 tikz-qtree 节点

我尝试tikz-qtree使用\onlybeamer 中的 添加和删除节点。结果却很奇怪。

如果我不使用,\only我就会看到我想要的图形。

\documentclass{beamer}
\usepackage{tikz-qtree}

\begin{document}

\begin{frame}
  \begin{tikzpicture}
    \Tree [.root
        [.subtree1 ] [.subtree2 ]
    ]
  \end{tikzpicture}
\end{frame}

\end{document}

具有两个子节点的根节点

但如果我添加,\only文本就会变得混乱。

\documentclass{beamer}
\usepackage{tikz-qtree}

\begin{document}

\begin{frame}
  \begin{tikzpicture}
    \Tree [.root
        \only<2>{ [.subtree1 ] [.subtree2 ] }
    ]
  \end{tikzpicture} 
\end{frame}

\end{document}

根节点有两个子节点,但标签很奇怪,例如 [.subtree1] 而不是 subtree1

预期输出

相当于以下代码的输出。遗憾的是,由于声誉不足,我无法包含超过两张图片。

\documentclass{beamer}
\usepackage{tikz-qtree}

\begin{document}

    \begin{frame}
      \begin{tikzpicture}
        \Tree [.root ]
      \end{tikzpicture}
    \end{frame}

    \begin{frame}
      \begin{tikzpicture}
        \Tree [.root
            [.subtree1 ] [.subtree2 ]
        ]
      \end{tikzpicture}
    \end{frame}

\end{document}

答案1

我认为,如果您有很多事情要做,那么森林会更容易,但tikz-qtree也可以工作。

以下是两者的代码,假设边应与节点一起出现。所用样式的作者在评论中注明,并附有更多详细信息的链接。

\documentclass{beamer}
\usepackage{tikz-qtree}
\usepackage[linguistics]{forest}
\makeatletter
\tikzset{% set up for transitions using tikz with beamer overlays - developed by Daniel (http://tex.stackexchange.com/a/55849/) and, in earlier form, by Matthew Leingang (http://tex.stackexchange.com/a/6155/) and modified for this use, I think by Qrrbrbirlbel (http://tex.stackexchange.com/a/112471/)
  invisible/.style={opacity=0,text opacity=0},
  visible on/.style={alt=#1{}{invisible}},
  alt/.code args={<#1>#2#3}{%
    \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
  },
}
\forestset{%
  visible on/.style={% developed by Qrrbrbirlbel (http://tex.stackexchange.com/a/112471/)
    for tree={%
      /tikz/visible on={#1},
      edge={/tikz/visible on={#1}}}},
}
\makeatother
\begin{document}

\begin{frame}
  \begin{tikzpicture}\tikzset{edge from parent/.append style={visible on=<2->}}
    \Tree [.root
      [.\node [visible on=<2->]{subtree1}; ] [.\node [visible on=<2->]{subtree2}; ]
    ]
  \end{tikzpicture}
  \begin{forest}
    where level=1{for tree={visible on=<2->}}{}
    [root
      [subtree1]
      [subtree2]
    ]
  \end{forest}

\end{frame}

\end{document}

两棵树

相关内容