3

マクロを使用してツリーを構築しようとしていますが、必要な結果が得られません。最小限の例を次に示します。

\documentclass{記事}
\usepackage{tikz}
\usetikzlibrary{ツリー}

\newcommand{\LeafNode}[1]{%
  子 {ノード {#1}}
}

\newcommand{\InnerNode}[3]{%
  子 {ノード {#3}
           #1
           #2
        }
}

\begin{ドキュメント}

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

\end{ドキュメント}

これにより、次の 2 つのツリーが生成されると予想していました。

    AA
   / \ / \
  BCBC
               / \
              DE

しかし、私は得ています:

           あ
           | |
   AB
   | | | |
   BD
   | | | |
   CC

私は何かが足りないのですか、それともそれを行う方法はありませんか?

ところで、ルート ノードのラベルを省略すると、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 に答える