树木和宏与tikz

时间:2010-01-05 19:32:11

标签: latex tikz pgf

我正在尝试使用宏构建我的树,但我没有得到我想要的结果。这是一个最小的例子:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{trees}

\newcommand{\LeafNode}[1]{%
  child {node  {#1}}
}

\newcommand{\InnerNode}[3]{%
  child {node {#3}
           #1
           #2
        }
}

\begin{document}

\begin{tikzpicture}
 \node (A) {A}
    \LeafNode{B}
    \LeafNode{C}
 ;
\end{tikzpicture}%
\hspace{2cm}%
\begin{tikzpicture}
 \node (A) {A}
    \InnerNode{\LeafNode{D}}{\LeafNode{E}}{B}
    \LeafNode{C}
 ;
\end{tikzpicture}

\end{document}

我希望这能产生两棵树:

    A             A
   / \           / \
  B   C         B   C
               / \
              D   E

但我得到了:

           A
           |
   A       B
   |       |
   B       D
   |       |
   C       C

我错过了什么或没有办法吗?

BTW,如果我省略了根节点上的标签,我会收到PGF错误:

! Package pgf Error: No shape named  is known.

- Tsf

2 个答案:

答案 0 :(得分:1)

这不是您问题的直接答案,但您可以查看tikz-qtree package。它为创建树提供了更简单的语法。

答案 1 :(得分:1)

似乎LaTeX隐式地对\ newcommand的输出进行分组。那么,

的结果
\begin{tikzpicture}
 \node (A) {A}
    \LeafNode{B}
    \LeafNode{C}
 ;
\end{tikzpicture}

与此相同:

 \begin{tikzpicture}
 \node (A) {A}
   {child {node {B}}}
   {child {node {C}}}
 ;
\end{tikzpicture}

TikZ扫描明确的“子”关键字,并在隐藏在命令或块中时找不到它。

我不知道这方面的任何方法,但我没有看到你的宏使语法更容易。