2010-01-05 4 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 

Могу ли я что-то отсутствует или нет никакого способа сделай это?

BTW, если я опустить метку на моем корневом узле, я получаю ошибку PGF:

 
! Package pgf Error: No shape named is known. 

- TSF

ответ

1

Это не прямой ответ на свой вопрос, но вы можете проверить из tikz-qtree package. Он обеспечивает более простой синтаксис для создания деревьев.

+0

Это правда, но у меня уже есть материал o с использованием чистого tikz и вы не хотите смешивать два стиля. Благодаря! - Tsf – Tsf

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 сканирует явные «дочерние» ключевые слова и не находит его, когда он скрыт в команде или блоке.

Я ничего не знаю об этом, но я не вижу, чтобы ваши макросы упрощали синтаксис.