3

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

\documentclass{文章}
\使用包{tikz}
\usetikzlibrary{树}

\newcommand{\LeafNode}[1]{%
  子{节点{#1}}
}

\newcommand{\InnerNode}[3]{%
  子{节点{#3}
           #1
           #2
        }
}

\开始{文档}

\开始{tikzpicture}
 \节点(A){A}
    \叶节点{B}
    \叶节点{C}
 ;
\end{tikzpicture}%
\hspace{2cm}%
\开始{tikzpicture}
 \节点(A){A}
    \InnerNode{\LeafNode{D}}{\LeafNode{E}}{B}
    \叶节点{C}
 ;
\结束{tikzpicture}

\结束{文档}

我希望这会产生两棵树:

    AA
   / \ / \
  加拿大广播公司
               / \
              德

但我得到:

           一个
           |
   AB
   | |
   BD
   | |
   抄送

我错过了什么还是没有办法做到这一点?

顺便说一句,如果我省略了根节点上的标签,我会收到 PGF 错误:

!包 pgf 错误:没有已知形状命名。

-- Tsf

4

2 回答 2

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 扫描显式的“子”关键字,当它隐藏在命令或块中时找不到它。

我不知道解决这个问题的任何方法,但我没有看到您的宏使语法更容易。

于 2010-02-06T13:17:00.470 回答
1

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

于 2010-01-06T11:00:17.590 回答