2010-01-05 24 views
3

我想用宏創建我的樹,但是我沒有得到我想要的結果。下面是一個小例子:tikz的樹和宏

 
\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 

我缺少的東西或者有沒有辦法做它?

順便說一句,如果我忽略我的根節點上的標籤,我得到一個錯誤PGF:

 
! Package pgf Error: No shape named is known. 

- TSF

回答

1

這不是直接回答你的問題,但你可以檢查出tikz-qtree package。它爲創建樹提供了更簡單的語法。

+0

這是真的,但我已經很多材料使用純tikz,不想混合這兩種風格。謝謝! - Tsf – Tsf 2010-01-06 13:08:05

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掃描,沒有發現它時,它被隱藏在一個命令或塊。

我不知道任何解決方法,但我沒有看到你的宏使語法更容易。