Arbres syntaxiques, taxonomies, arbres de décision, B-arbres : pour dessiner des diagrammes ramifiés en LaTeX, on retient surtout trois outils. Le plus puissant et moderne est forest; le standard rapide pour les arbres syntaxiques de linguistique est qtree / tikz-qtree; et pour de petits arbres sans paquet supplémentaire, il y a TikZ pur. Tous trois permettent de décrire la structure imbriquée « un parent se développe en enfants » sans calculer une seule coordonnée. Cette page explique comment choisir et comment écrire chaque forme.
Trois approches
Un arbre est essentiellement une structure imbriquée (récursive) : une racine, des enfants en dessous, puis des petits-enfants, etc. Si cette imbrication peut se refléter par des crochets imbriqués, on construit un arbre sans spécifier de coordonnées. Les trois outils reposent sur cette idée, mais diffèrent par leur ergonomie et leur portée.
forest— le paquet le plus flexible, construit sur TikZ et pgfkeys. À sa notation à crochets étiquetés[root [child] [child]], on peut ajouter des options par nœud et un style global, et il compacte automatiquement les espacements selon la complexité du contenu des nœuds. Convient à la linguistique comme aux arbres généraux.qtree/tikz-qtree— le standard le plus rapide pour les arbres syntaxiques linguistiques. On écrit\Tree [.S [.NP ... ] [.VP ... ] ], où.labelmarque un nœud non terminal, donc ramifié.tikz-qtreeréimplémente la même notation sur TikZ, avec une sortie plus soignée et plus de contrôle.- TikZ pur (bibliothèque
trees) — le mécanismechild/node,\node {root} child {node {a}} child {node {b}};. Aucun paquet supplémentaire, bien adapté à un petit arbre dessiné sur place.
En bref, forest est le plus flexible et convient aux arbres élaborés, tandis que qtree / tikz-qtree sont les plus rapides pour les arbres de constituants. TikZ pur n’ajoute aucune dépendance et reste agile pour les petits cas. Examinons-les tour à tour.
forest : arbres modernes entre crochets
forest (Sašo Živanović, CTAN) est un paquet de dessin d’arbres construit sur TikZ et pgfkeys. On le charge dans le préambule, puis on écrit l’arbre en notation à crochets étiquetés dans un environnement forest. Chaque nœud est entouré de crochets [ ], et ses enfants sont listés à l’intérieur; l’imbrication des crochets *est* l’imbrication de l’arbre. Pour la linguistique, l’option linguistics fait que les branches se rejoignent au-dessus des deux enfants.
\usepackage[linguistics]{forest}
\begin{forest}
[CP
[C]
[IP
[I]
[VP
[V]
[NP]
]
]
]
\end{forest}Cet exemple dessine un arbre dont la racine CP domine C et IP; IP domine I et VP; puis VP domine V et NP. Le compacter sur une ligne comme [CP[C][IP[I][VP[V][NP]]]] donne le même arbre, mais dès que c’est complexe, les crochets deviennent difficiles à apparier. L’usage est donc de montrer la hiérarchie par des retours à la ligne et de l’indentation, comme ci-dessus. Un piège : une ligne vide dans la source fait échouer l’analyse de forest, car elle est lue comme une coupure de paragraphe. L’indentation elle-même est libre.
La force de forest est sa mise en page automatique. Il place chaque nœud selon la complexité de ce qu’il domine et compacte horizontalement les nœuds pour éviter les collisions; même un arbre chargé sort presque présentable tel quel. Pour ajuster les espacements, appliquez for tree={...} à tout l’arbre ou à un sous-arbre. Les trois réglages les plus fréquents sont s sep (séparation horizontale), l (distance verticale entre niveaux) et inner sep (marge interne autour d’un nœud).
\usepackage[linguistics]{forest}
\begin{forest}
for tree={s sep=10mm, inner sep=0, l=0}
[CP
[C]
[IP, for tree={s sep=20mm}
[I, name=src]
[VP
[V]
[DP, roof, name=tgt][the woman]]
]
]
\draw[->] (src) to[out=south west, in=south] (tgt);
\end{forest}Cet exemple concentre plusieurs idiomes. Le for tree={...} initial fixe l’espacement de tout l’arbre, et placer une virgule après une étiquette de nœud, comme dans [IP, for tree={s sep=20mm}, remplace l’espacement pour ce sous-arbre seulement. roof met un triangle, un « toit », sur l’étiquette du nœud, pour abréger une structure interne et montrer un syntagme comme unité. Avec name=, on nomme un nœud et l’on peut, après le crochet fermant de l’arbre, tracer une flèche de mouvement par \draw[->] (src) to[...] (tgt); (dans forest, les commandes TikZ s’utilisent directement). Pour mettre une virgule *dans* une étiquette, entourez-la d’accolades, comme {NP, PP}, afin de la distinguer d’une instruction de mise en page.
Si vous ne voulez pas réécrire le même aspect à chaque fois, définissez un style par défaut dans le préambule avec \forestset{default preamble={for tree={...}}}. Comme forest repose sur TikZ/pgf, l’apparence fine des nœuds — forme, couleur, pointes de flèche, surbrillance — découle directement de ce que vous savez de TikZ (voir « Bases de TikZ »).
qtree / tikz-qtree : le chemin le plus court vers un arbre syntaxique
Pour dessiner rapidement un arbre de constituants en linguistique, le standard de longue date est qtree. On met \usepackage{qtree} dans le préambule puis, dans le corps, on fait suivre \Tree d’un arbre entre crochets. Le cœur de la notation : une étiquette précédée d’un point . marque un nœud non terminal, donc ramifié, tandis qu’un mot nu sans point est une feuille, un terminal.
\Tree [.S [.NP Kim ] [.VP [.V saw ] NP ] ]Cette seule ligne dessine un arbre dont la racine S domine NP et VP; NP a la feuille Kim; et VP domine V (feuille saw) et NP. Quelques règles s’appliquent : l’arbre doit venir immédiatement après \Tree; les étiquettes non terminales commencent par un point (.S); et un crochet fermant ] doit être précédé d’un espace (comme saw ]). qtree offre aussi des raccourcis : NP_i et N^0 formatent automatiquement indices et exposants en mode math dans l’arbre, X\1 abrège X$'$ (X′), et \qroof{...} met un toit triangulaire au-dessus d’un syntagme (par ex. \qroof{out of style}.PP). Pour désactiver le centrage automatique, chargez \usepackage[nocenter]{qtree}.
tikz-qtree (David Chiang) réimplémente cette notation \Tree sur TikZ. Chargez \usepackage{tikz} et \usepackage{tikz-qtree}, et le même \Tree [.S ... ] fonctionne inchangé, avec une qualité TikZ. Pour les arbres simples, il est presque entièrement interchangeable avec qtree; comme la mécanique de styles de TikZ s’applique, flèches et branches se règlent plus facilement. Par exemple, \tikzset{grow'=right} fait croître l’arbre de gauche à droite plutôt que de haut en bas. Là où le qtree original trace les lignes à partir des seules métriques de police, tikz-qtree dessine avec TikZ : les lignes sont plus lisses et les décorations ultérieures plus faciles.
TikZ pur : child et node
Pour un petit arbre sans paquet supplémentaire, le mécanisme child propre à TikZ suffit. Après avoir placé un nœud, ajoutez child {...} : son contenu est disposé comme un enfant et l’arête parent-enfant est dessinée automatiquement. Dans un child, on écrit généralement node {...}, puis on imbrique d’autres child pour obtenir des petits-enfants.
\begin{tikzpicture}[level distance=12mm, sibling distance=24mm]
\node {root}
child { node {a} }
child { node {b}
child { node {c} }
child { node {d} }
};
\end{tikzpicture}Cet exemple dessine de haut en bas une racine root au-dessus de a et b, avec b divisé ensuite en c et d. Notez l’unique point-virgule ; pour tout l’arbre, à la fin de \node ... ;. Le placement dépend de deux distances : l’écart vertical entre le niveau d’un parent et celui de ses enfants, level distance (15 mm par défaut), et l’écart horizontal entre enfants voisins, sibling distance (15 mm par défaut). Pour les varier par niveau, utilisez level ⟨n⟩/.style, par exemple level 1/.style={sibling distance=4cm}. La direction de croissance change avec [grow=right], etc., et les arêtes se règlent avec edge from parent (par exemple edge from parent fork down pour des connecteurs à angle droit).
TikZ pur est pratique, mais comme il n’a pas de compactage automatique à la manière de forest, il faut ajuster sibling distance à la main pour éviter les chevauchements quand le nombre d’enfants ou la profondeur augmente. Il suffit pour un petit arbre de quelques niveaux, mais pour un arbre syntaxique chargé, ou un arbre dont l’espacement doit suivre le contenu, forest demande moins de travail.
Que choisir ?
Règle pratique en cas d’hésitation. Globalement, pour un nouvel arbre, commencez par forest : mise en page automatique, usages allant de la linguistique aux arbres généraux, et toute la puissance de TikZ pour la décoration. Pour écrire rapidement un seul arbre syntaxique, la notation \Tree de qtree / tikz-qtree est le plus court chemin, avec tikz-qtree si vous voulez une sortie plus polie. Pour un arbre de quelques niveaux sans nouvelle dépendance, le child de TikZ pur suffit.
| Outil | Notation | Usage adapté |
|---|---|---|
forest | [root [child] [child]] (crochets) | Arbres élaborés, auto-mise en page, linguistiques et généraux |
qtree | \Tree [.S [.NP ... ] ... ] | Arbres syntaxiques les plus rapides; léger, fondé sur les polices |
tikz-qtree | \Tree (comme qtree) | Arbres syntaxiques en qualité TikZ, plus réglables |
TikZ (trees) | \node {r} child {node {a}} | Petits arbres; éviter des paquets supplémentaires |
Tous sont sur CTAN et fournis avec TeX Live et MiKTeX. forest et tikz-qtree se trouvent sous graphics/pgf/contrib/ sur CTAN et dépendent de TikZ/pgf. Pour les détails complets de chaque paquet, la référence la plus sûre est texdoc forest, texdoc tikz-qtree ou texdoc qtree sur votre machine.