Verfasst von: Dietmar | Oktober 21, 2008

Syntaxbäume unter LaTeX mit qtree

Da ich es in nächster Zeit vermutlich selbst öfter brauchen werde, habe ich beschlossen, die wichtigsten Dinge über qtree zusammenzutragen.

Wer beispielsweise MikTeX unter Windows nutzt, der hat wohl keine Probleme, weil sich die Distribution alles aus dem Internet holt, was sie braucht. Unter Ubuntu braucht man zusätzlich zum Paket texlive noch die Pakete texlive-humanities und texlive-pictures, damit qtree überhaupt funktioniert.

Alles, was mit \Tree anfängt ist bei mir eine Zeile, auch wenn unten teilweise ein Zeilenumbruch angezeigt wird. Leerzeichen innerhalb dieser Zeile sind teilweise sehr wichtig, damit der Code läuft.

Ein einfacher Baum könnte dann z.B. so aussehen:

documentclass[a4paper,10pt]{article}
\usepackage{qtree}

\begin{document}
\Tree [.XP [.XP [.X tri ] [.YP [.Y tra ] ] ] [.Z trullala ] ]
\end{document}

Wenn man bestimmte Dinge zusammenfassen möchte, sieht die Codezeile so aus:

\Tree [.XX [.XP [.X‘ [.X tri ] [.YP [.Y tra ] ] ] [.X trullala ] ] \qroof{das Kasperle}.X ]

Hoch- und tiefgestellte Zahlen und Buchstaben funktionieren so:

\Tree [.XX [.XP [.X_a [.X tri^1 ] [.YP [.Y tra^2 ] ] ] [.X trullala^3 ] ] \qroof{das Kasperle^4}.X ]

Zeilenumbruch mit doppeltem Backslash:

\Tree [.XX [.XP [.X_a [.X tri^1 ] [.YP [.Y tra^2 ] ] ] [.X trullala^3 ] ] \qroof{das\\ Kasperle^4}.X ]

Pfeile dürfen auch nicht fehlen. Hier gibt es allerdings eine kleine Einschränkung: wenn man Pfeile verwendet, dann kann man nicht direkt PDFs erzeugen. Man muss erst die LaTeX-Quellen als .dvi-Datei kompilieren und diese dann irgendwie in PDF umwandeln. Soweit kein Hexenwerk, aber wer Ubuntu verwendet, für den liegt hier noch eine kleine Überraschung verborgen: evince, das Programm, welches standardmäßig verwendet wird um DVI-Dateien anzuzeigen, kann diese Dateien nicht korrekt darstellen. Ich verzweifelte fast, als ich eigentlich alles richtig gemacht habe, aber mein Syntaxbaum plötzlich keine sichtbaren Äste mehr hatte. Ich kann also nur dringend empfehlen, kdvi zu installieren und damit die Ergebnisse zu betrachten. Unter kdvi sollte man dann allerdings davon absehen, die PDF-Exportfunktion zu verwenden, da dies hinterher wieder so auszusehen scheint, wie die dvi-Datei unter evince. Lieber File -> Print -> Print to file (PDF). Das sieht dann als PDF auch unter evince ordentlich aus. Mir hat dies einige neue Erfahrungen und etliche graue Haare beschert 😉

Man muss innerhalb des Baumes Knoten definieren, denn nur solche Knoten lassen sich verbinden. Die Syntax ist \node{Knotenname}{Beschriftung} und aussehen könnte das z.B. so:

\documentclass[a4paper,10pt]{article}
\usepackage{qtree}
\usepackage{tree-dvips}

\begin{document}

\Tree [.XP [.XP [.X \node{von}{tri} ] [.YP [.Y \node{ueber}{tra} ] ] ] [.Z \node{nach}{trullala} ] ]

\anodecurve[bl]{von}[b]{ueber}{0.3in}
\anodecurve[b]{ueber}[br]{nach}{0.5in}

\end{document}

Solch hübsche runde Pfeile bekommt man dann mit
\anodecurve[OrtAmStartknoten]{Startknoten}[OrtAmEndknoten]{Endknoten}{Krümmung}

[OrtAm…] – hier kann man einstellen, ob es [l] links, [bl] unten links, [b] unten Mitte, [br] unten rechts, [r] rechts, [tr] oben rechts, [t] oben Mitte oder [tl] oben links losgehen oder enden soll. Die Unterschiede sieht man in obigen Beispiel zwischen [bl]-tri, [b]-tra und [br] trullala.

{Krümmung} – mit dieser Zahl kann man manipulieren, wie stark der Pfeil gekrümmt werden soll. Die Zahl kann auch negativ sein.

Es gibt auch gestrichelte Pfeile. Der Baum hier ist zwar noch größerer Schwachsinn, als die vorigen, aber erfüllt seinen Zweck 🙂

\documentclass[a4paper,10pt]{article}
\usepackage{qtree}
\usepackage{tree-dvips}

\begin{document}

\Tree [.XP [.XP [.X tri ] [.\node{ueber}{YP} [.Y \node{von}{tra} ] ] ] [.\node{nach}{Z} trullala ] ]

{\makedash{2.3pt}\anodecurve[r]{von}[r]{ueber}{.15in}}
{\makedash{4pt}\anodecurve[r]{ueber}[l]{nach}{.4in}}

\end{document}

Von „tra“ über „YP“ nach „Z“. Wie man sieht, bewirkt eine kleinere Zahl im makedash-Befehl, dass der Pfeil feiner gestrichelt wird.

Zum Schluss noch eine Kleinigkeit zum Rumspielen, und zwar eckige Pfeile:

\Tree [.XP [.XP [.X \node{nach}{tri} ] [.\node{ueber}{YP} [.Y tra ] ] ] [.Z \node{von}{trullala} ] ]

\abarnodeconnect[-45pt]{von}{nach}

Das Ganze gibt es ausführlicher (aber auf Englisch) unter ctan.org, und zwar insbesondere in den Dateien qtreenotes.pdf und qarrows.pdf

Advertisements

Responses

  1. Hallo Dietmar,

    sehr guter Artikel, vielen Dank fuers Mit-sharing the knowledge :).
    Ich habe eine Frage bezueglich der Edges von einem Baum. Kann man mit qtree auch Baeme erzeugen, die etwas auf einem Edge geschrieben haben? Ich moechte so ein Baum wie hier erzeugen: http://www.cs.mcgill.ca/~cs251/OldCourses/1997/topic7/
    (schau mal bitte unter „Non compact trees“). Ich moechte es so machen, dass mein Text zu einem Edge gehoert, und nicht (nur) zu einem Node oder Leaf. Ich habe ein Tutorial ueber qtree gefunden: „Qtree, a Latex tree-drawing package“, aber da steht nichts dafuer drin. Es sieht so aus, dass man Text nur zu einem Node Label oder Leaf schreiben kann. Weisst du aber doch etwas anderes?

  2. Ich hab‘ was gefunden:
    http://www.essex.ac.uk/linguistics/clmt/latex4ling/trees/
    Sieht so aus dass mit xyling man „branches as well as nodes“ labeln kann. Ich probiere es gerade, hoffentlich klappt es.

  3. Hi Dietmar,

    nette Ausführung für mein Praktikum. Sehr nützlich.
    Ein Problem hab ich jedoch. Diese Pfeile von Node zu Node funktionieren bei mir nicht. Kompiliert alles wunderbar, jedoch keine Pfeile als output.

    Gruß,

    Niko

    • Die Pfeile funktionieren (zu meiner Verärgerung) nur, wenn man die TeX-Datei nach DVI kompiliert. Und das musste dann wieder irgendwie nach PDF konvertiert bekommen. Selbst dann hatte ich neulich noch Probleme. Deshalb habe ich den Baum letztendlich als DVI in einer extra Datei kompiliert, einen Screenshot gemacht und diesen dann als Graphik in die eigentliche Datei eingebunden… 😦


Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Kategorien

%d Bloggern gefällt das: