2010-01-05 6 views
3

J'essaye de construire mes arbres en utilisant des macros mais je n'obtiens pas le résultat que je veux. Voici un exemple minimal:Arbres et macros avec 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} 

Je m'y attendais à produire deux arbres:

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

mais je reçois:

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

Est-ce que je manque quelque chose ou il n'y a aucun moyen de fais le?

BTW, si je laisse de côté l'étiquette sur mon nœud racine, je reçois une erreur de PGF:

 
! Package pgf Error: No shape named is known. 

- Tsf

Répondre

1

Ce n'est pas une réponse directe à vous la question, mais vous pouvez vérifier sur le tikz-qtree package. Il fournit une syntaxe plus simple pour créer des arbres.

+0

C'est vrai, mais j'ai déjà beaucoup de matériel utilisant du tikz pur et je ne veux pas mélanger les deux styles. Merci! - Tsf – Tsf

1

Il semble que LaTeX groupe implicitement la sortie d'une commande \ new. Ainsi, le résultat de

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

est la même que celle-ci:

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

scans TIKZ pour les mots clés « enfants » explicites et ne trouve pas quand il est caché dans une commande ou d'un bloc.

Je ne connais aucun moyen de contourner cela, mais je ne vois pas que vos macros facilitent la syntaxe.