Sie sind auf Seite 1von 6

Graphen zeichnen mit TikZ:

Im Anfang war der Pfad


Till Tantau

Mathematische Ideen möchten visualisiert werden. Ob- ist kein Zeichenprogramm“ (wohl das erste rekursive ty-
wohl sich alle Mathematik-Sachverhalte rein durch Texte pografische deutsche Akronym der Informatikgeschich-
und Symbolfolgen beschreiben lassen, veranschaulichen te). Der Name soll Autoren warnen, dass sie keinen gra-
wir sie am liebsten mittels Zeichnungen von Relationen, fischen Editor erwarten dürfen, sondern vielmehr eine
Funktionen, Graphen, Mengen oder Räumen. Eine Mög- Sammlung von TEX-Befehlen mit allen Vor- und Nachtei-
lichkeit, Visualisierungen von mathematischen Ideen spe- len, die ein solcher Ansatz mit sich bringt.
ziell im Kontext des TEX-Satzprogrammes zu erstellen,
stellt die Grafikbeschreibungssprache TikZ dar. Anhand Ursprünglicher Anlass für die Entwicklung von TikZ war,
eines einfachen Beispiels – ein Graph, dessen Knoten im dass ich für meine Promotionsschrift Zeichnungen di-
Kreis angeordnet werden sollen – werden im Artikel drei rekt in TEX erstellen wollte. Alle damals verfügbaren
unterschiedliche Arten vorgestellt, diesen mit TikZ zu Pakete hatten Nachteile: Metafont und PSTRICKS kamen
zeichnen: Die direkte Nutzung von Pfaden, was die in der mit dem PDF-Format nicht zurecht, die Qualität der von
TikZ-Historie älteste Möglichkeit darstellt; die Nutzung LATEXs Picture-Umgebung erzeugten Zeichnungen genüg-
spezieller Befehle zum Zeichnen von Knoten und Kanten, te mir nicht, Pakete wie XYPIC nutzten eine kryptische
eine neuere und komfortablere Art der Beschreibung; Syntax und waren weitgehend undokumentiert. So ent-
und schließlich die Nutzung spezieller Graphzeichnen- stand eine erste noch sehr einfache Version von TikZ,
Algorithmen, der jüngsten Erweiterung von TikZ. die aber bereits Zeichnungen sowohl im PDF- wie auch
PostScript-Format erstellen konnte, die qualitativ hoch-
wertige Zeichnungen erzeugte und die auch eine Doku-
mentation besaß. Über zehn Jahre später ist die Doku-
1 Einleitung
mentation auf weit über 1000 Seiten angewachsen und
mit TikZ lassen sich nun viele Standardprobleme bei der
David Hilbert hat mit seinem berühmten Ausspruch, es Visualisierung von Mathematik auf elegante Art lösen.
müsse egal sein, ob man von „Punkten“, „Geraden“ und
„Ebenen“ spreche oder von „Tischen“, „Stühlen“ und
„Bierseideln“, die Anschaulichkeit aus dem Kern der Ma-
x1
thematik verbannt: Mathematik-Studenten lernen heu-
te früh, dass sich die gesamte Mathematik auf logische
xn x2
Kalküle und die Axiome der Mengenlehre zurückführen
lässt, dass jeder mathematische Satz letztendlich nur ei-
ne formell ableitbare Symbolfolge darstellt. Betritt man
aber hundert Jahre nach Hilberts Diktum das Büro einer xn−1 ...
Mathematikerin, eines Theoretischen Informatikers oder
einer Theoretischen Physikerin, so sind die Tafeln dort Abbildung 1. Die mit TikZ zu erstellende Beispielzeichnung
voll mit Skizzen, komplexen Diagrammen und Zeichnun-
gen von Graphen. Formell mag die Mathematik auf rei-
ne Symbolmanipulation zurückführbar sein – wenn Men- Dieselbe Zeichnung kann in TikZ oft auf viele verschie-
schen über mathematische Sachverhalte sprechen und dene Arten erzeugt werden. Im Folgenden sollen gleich
schreiben, nutzen sie vielfältige Arten der Visualisierung, drei Wege gezeigt werden, wie der in Abbildung 1 ge-
um ihre Ideen anderen verständlich zu machen. zeigte Graph in TikZ beschrieben werden kann. Als ers-
tes werden wir den Graphen direkt mittels Pfaden zeich-
Mathematische Texte werden heute fast ausschließlich mit nen, was zugleich die Methode der Wahl in der allerers-
Donald Knuths Programm TEX verfasst, da es eine uner- ten Version von TikZ war. Komfortabler ist dann schon
reichte typografische Qualität bietet und gleichzeitig ge- die Nutzung von „Knoten“ und „Kanten“ zur Beschrei-
übten Autoren eine unerreicht hohe Arbeitsgeschwindig- bung des Graphen – die Namen kommen nicht von un-
keit erlaubt. Die Visualisierung von mathematischen Ideen gefähr –, was bisher die beste Art war, eine Zeichnung
hingegen ist in TEX nicht direkt vorgesehen; Knuth hat wie die in Abbildung 1 zu beschreiben. Zum Schluss darf
aber einen allgemeinen Mechanismus in sein Programm dann die seit Anfang 2014 verfügbare Version von TikZ
eingebaut, mit dem sich diese Fähigkeit mit einigem Auf- ihre Fertigkeiten demonstrieren: Durch die Nutzung ei-
wand prinzipiell nachrüsten lässt. Ein freies Paket, das den ner neuen Graphsyntax und Algorithmen zum automa-
Aufwand nicht gescheut hat, ist das TikZ-Paket, um das tischen Zeichnen von Graphen lässt sich der Graph auf
es in diesem Artikel gehen soll. „TikZ“ steht für „TikZ sehr kompakte Art beschreiben.

DOI 10.1515/dmvm-2014-0016 FOKUS 35


Egal wie wir die Zeichnung aus der Abbildung im Folgen- erzeugt
den beschreiben werden, einige Elemente bleiben gleich:
Um die von TikZ definierten neuen TEX-Befehle über-
haupt nutzen zu können, muss TikZ zunächst geladen
werden (extra installiert werden muss es zum Glück
nicht, da es Teil jeder Standard-TEX-Installation ist). In
LATEX geschieht dies wie bei anderen Paketen auch mittels Statt eines Kreises benötigen wir aber vier Kreise, de-
\usepackage{tikz}, für die LATEX-Alternative ConTEXt ren Mittelpunkte ihrerseits auf einem Kreis liegen. Dies
und für das klassische PlainTEX gibt es analoge Befehle. ist leicht zu erreichen, indem wir die Mittelpunkte mit-
Im eigentlichen Dokument können nun {tikzpicture}- tels Polarkoordinaten angeben, was in TikZ durch Benut-
Umgebungen eingefügt werden (wieder gibt es Pendants zung eines Doppelpunkts statt eines Kommas geschieht
für ConTEXt und PlainTEX), jede von ihnen erzeugt dann (TikZ kennt noch viele weitere Koordinatensysteme und
eine Zeichnung aufgrund der speziellen Befehle inner- es können, falls nötig, auch eigene definiert werden). Wir
halb der Umgebung. Praktischerweise muss die Größe ersetzen also den Pfad durch einen Pfad bestehend aus
des Bildes nicht angegeben werden, TikZ errechnet diese vier Kreisen:
selbst und reserviert die nötige Menge an Platz auf der
\draw ( 90:13mm) circle [radius=5mm]
Seite. Das fertige Dokument kann schließlich mit allen ( 90-72:13mm) circle [radius=5mm]
gängigen Varianten von TEX gesetzt werden, sei es TEX, ( 90+72:13mm) circle [radius=5mm]
XETEX, pdfTEX oder LuaTEX. Normalerweise resultiert (90+144:13mm) circle [radius=5mm];
dies schließlich in einer PDF-Datei, es lassen sich aber
Wir erhalten:
auch SVG-Dateien direkt erzeugen, was im Web-Kontext
nützlich ist.

2 Im Anfang war der Pfad

Die zentralen grafischen Elemente, mit denen TikZ und


auch die meisten anderen Grafiksprachen intern arbei-
ten, sind Pfade. Mathematisch sind dies Mengen von offe-
nen oder geschlossenen Kurven, die stückweise kubische
Bézier-Kurven sind. In unserem Beispielgraph bilden die
Kreise Pfade, ebenso die Bögen der Pfeile zwischen den
Knoten. Sogar jede einzelne der kleinen Pfeilspitzen ist Als nächstes wollen wir die Kanten zwischen den Krei-
von einem Pfad umfasst. sen (die Bögen) hinzufügen. Hierfür bietet sich der Be-
fehl arc an, der dem Pfad ab der aktuellen Position einen
Pfade spezifiziert man in TikZ in einer speziellen Syntax, Kreisbogen anfügt, wobei der Startwinkel, der Endwin-
die sich in ihren Grundzügen an Donald Knuths Metafont kel und der Kreisradius als Optionen angegeben werden.
anlehnt. So beschreibt Beispielsweise erhalten wir den Bogen vom oberen Kreis
(0,0)--(2,2)--(2,0)--(0,2)--cycle zu seinem rechten Nachbarn wie folgt:
einen sich selbst kreuzenden, geschlossenen Pfad ( ). In \draw (68:13mm) arc [ start angle = 68,
unserem Beispiel wollen wir als erstes die Kreise zeich- end angle = 50,
nen. Jeder lässt sich gut durch vier Bézier-Bögen appro- radius = 13mm ];
ximieren, deren Koordinaten man aber natürlich nicht Die Winkel von 68◦ und 50◦ ergeben sich daraus, dass
selbst berechnen muss, sondern die man mittels des spe- die Bögen ja am Rand der Kreise beginnen und enden sol-
ziellen Befehls circle erzeugt. So ist der folgende Pfad len und nicht jeweils in deren Mitte. „Etwas Ausprobie-
ein auf den Urspung zentrierter Kreis mit einem Zenti- ren“ ergab, dass die Winkel der Mittelpunkte der Krei-
meter Durchmesser: se (90◦ und 18◦ ) um 22◦ verkleinert beziehungsweise
(0,0) circle [radius=5mm] vergrößert werden müssen. Fügt man entsprechend auch
Befehle für die anderen Bögen hinzu, so erhält man:
Die Spezifikation eines Pfades alleine erzeugt allerdings
noch keine Zeichnung. Es „muss etwas mit dem Pfad pas-
sieren“; bei den Kreisen möchten wir, dass sie gezeich-
net werden, dass also ein Stift entlang des Pfades geführt
wird. Hierfür benutzt man wie in Metafont den Befehl
\draw, dem ein Pfad folgt und der durch ein Semikolon
abgeschlossen wird:
\begin{tikzpicture}
\draw (0,0) circle [radius = 5mm];
\end{tikzpicture}

36 FOKUS MDMV 22 / 2014 | 35–40


Es ist mühselig und fehlerträchtig, die Start- und End-
x1
winkel für jeden der fünf Bögen einzeln auszurechnen.
Praktischer wäre es, die gleichartigen Bögen mittels einer
xn x2
Schleife zu erzeugen, bei der sich lediglich der Winkel in
72◦ -Schritten ändert. Hierfür bietet TikZ den \foreach-
Befehl, mit dem sich sehr viele ähnlich gelagerte Fälle au-
tomatisieren lassen: xn−1 ...
\foreach \angle in {18, 90, 162, 234, 306} {
\draw (\angle-22:13mm)
arc [ start angle = \angle-22,
end angle = \angle-72+22, 3 Von Knoten und Kanten
radius = 13mm ];
}
Es mutet reichlich verdächtig an, dass der Befehl zur Er-
Unsere Bögen benötigen noch gefüllte Pfeilspitzen. Man zeugung von Beschriftungen ausgerechnet „node“ heißt
könnte nun für jede dieser Spitzen einen kleinen Pfad – und nicht etwa „text“ oder „label“. Tatsächlich ist sein
angeben und diesen dann mittels \fill füllen (statt eigentlicher Zweck die Spezifikation von Knoten im Sin-
ihn mit \draw nur zu „zeichnen“). Da jedoch Pfeilspit- ne der Graphentheorie – dass diese geeignet positioniert
zen recht häufig vorkommen, bietet TikZ Unterstützung: auch einfach nur als Beschriftungen dienen können, ist
Dem \draw-Befehl kann die Option [->] übergeben wer- eher ein angenehmer Nebeneffekt. Meist ist es bei der
den. Hierdurch wird am Ende des Pfades eine Pfeilspitze Spezifikation von Knoten sogar fast hinderlich, dass über-
mit der richtigen Ausrichtung gezeichnet. Verändern wir haupt ein Pfad angegeben werden muss, auf dem dann die
also die \draw-Befehle der Bögen und erhalten: Knoten positioniert werden. TikZ stellt deshalb den Be-
\draw [->] (\angle-22:13mm) ...
fehl \node zur Verfügung, mit dem sich unabhängig von
einem Pfad ein Knoten erzeugen lässt.
Knoten haben in TikZ eine Form, eine Koordinate, einen
Namen und eine Beschriftung. All diese Angaben sind op-
tional und jede hat ihre eigene Syntax; lediglich die Be-
schriftung muss immer am Ende in geschweiften Klam-
mern angegeben werden, sie kann aber leer sein. Die all-
gemeine Syntax des \node-Befehls lautet vereinfacht (ih-
re exakte Beschreibung nimmt knapp vier Seiten in der
Dokumentation ein):
\node [Form,weitere Optionen]
(Name) at (Koordinate)
Das Aussehen der Pfeilspitze werden wir später noch an- {Beschriftung };
passen; die oben zu sehende Voreinstellung ist die Art
Pfeil, die man in TEX aus mathematischen Formeln wie Die wohl wichtigste Eigenschaft eines Knotens ist seine
f : A → B gewohnt ist. Etwas schöner werden die Pfeile Form. Knoten können quadratisch sein, rechteckig, kreis-
noch, wenn man sie an den Spitzen leicht verkürzt, bei- förmig, elliptisch oder eine von vielen ausgefallenen wei-
spielsweise indem der Endwinkel um 2◦ erhöht wird. teren Formen haben. Die Knoten in unserem Beispiel
sind offenbar kreisförmig, weshalb wir als Form „circle“
Es fehlen nur noch die Beschriftungen. Da solche Be- angeben (sie hat nichts mit dem gleichnamigen Pfadkom-
schriftungen typischerweise an bestimmten Punkten auf mando zu tun). TEX setzt nun zunächst die Beschriftung
einem Pfad eingefügt werden sollen, gibt man solche Be- normal und zentriert sie an der angegebenen Koordina-
schriftungen auch mit an, während man Pfade spezifiziert. te. Stellen wir uns nun ein Rechteck minimaler Größe
Jeder Koordinate auf einem Pfad darf der Befehl node fol- um diese Text vor. TEX vergrößert es an allen Seiten um
gen, der einen beliebigen Text als Parameter bekommt, einen gewissen Puffer und berechnet dann für die Form
jedoch ist dieser Text nicht Teil des Pfades. Er wird viel- „circle“ den kleinsten Kreis, der es enthält. Die wei-
mehr erst eingefügt, nachdem der Pfad gezeichnet wurde. teren Optionen regeln, was mit dem so entstandenen
In unserem Beispiel können wir die Beschriftungen genau Pfad passiert: Wir können ihn zeichnen (draw) oder fül-
den Kreismittelpunkten folgen lasse. Der erste Kreis lau- len (fill) oder auf viele weitere Arten nutzen.
tet dann:
In unserem Beispiel haben wir fünf kreisförmige Knoten,
\draw (90:13mm) node{$x_1$} circle[radius=5mm];
wobei beim Knoten mit den drei Pünktchen der Pfad nicht
Ergänzt man die anderen Beschriftungen entsprechend gezeichnet wird:
und verkürzt die Pfeile wie oben beschrieben, so erhalten \node [circle, draw] at (90:13mm) {$x_1$};
wir unsere erste vollständige Zeichnung von Abbildung 1, \node [circle, draw] at (18:13mm) {$x_2$};
wobei wir nur Pfade und Beschriftungen genutzt haben: \node [circle] at (306:13mm) {$\dots$};

MDMV 22 / 2014 | 35–40 FOKUS 37


\node [circle, draw] at (234:13mm) {$x_{n-1}$}; dann Optionen übergeben, die das Aussehen der Kante
\node [circle, draw] at (162:13mm) {$x_n$}; auf vielfältige Weise modifizieren. Beispielsweise krümmt
bend left die Kante etwas nach links und wir können
x1 die Stärke der Krümmung einstellen:
\draw (A) edge[bend left = 17, ->] (B);
\draw (B) edge[bend left = 17, ->] (C);
xn x2
...

Alles zusammengenommen haben wir nun eine zehn Zei-


len lange Spezifikation des Graphen, die nicht nur relativ
xn−1 ...
selbsterklärend ist, sondern auch leicht modifizierbar. Ein
weiterer Knoten oder Querkanten wären beispielsweise
leicht einzubauen.
Schön zu erkennen ist, wie sich die Größe der Knoten
automatisch den Beschriftungen anpasst. Weniger schön
ist, dass so dem vorletzten Knoten ein optisches Überge- x1
wicht gegeben wird, das er in unserem Beispiel nicht ver-
dient hat. Dies können wir durch eine weitere Option xn x2
beheben: minimum size=1cm garantiert, dass alle Kno-
ten mindestens einen Zentimeter Durchmesser haben.
Nachdem wir alle Knoten spezifiziert haben, kümmern xn−1 ...
wir uns nun um die Kanten. Im vorigen Abschnitt war es
noch ziemlich aufwändig, die „Bögen“ zu zeichnen, ins-
besondere das Finden der korrekten Randpunkte auf den
Knoten war umständlich und unbefriedigend. TikZ schafft 4 Algorithmisches Zeichnen von Graphen
hier Abhilfe durch eine einfache Idee: Gibt man einem
Knoten einen Namen, so kann man ihn später „wie eine Vergleicht man die Ansätze aus den beiden vorigen Ab-
Koordinate benutzen“, jedoch beginnen und enden Linien schnitten, so ist klar ein Sprung im Grad der Abstrakti-
automatisch am Rand des Knotens statt an dessen Mit- on erkennbar. Der rein pfadbasierte Ansatz erlaubt zwar
telpunkt. die „totale Kontrolle“ über das Aussehen und die Posi-
tionierung jedes einzelnen grafischen Elements, die Be-
Zunächst müssen wir also unsere Knoten benennen, bei-
schreibung eines Graphen mit node- und edge-Befehlen
spielsweise mit A bis E:
ist jedoch sicherlich in aller Regel vorzuziehen. Kommt
\node [circle, draw] (A) at (90:13mm) {$x_1$}; beispielsweise ein weiterer Knoten hinzu, so erfordert
\node [circle, draw] (B) at (18:13mm) {$x_2$};
dies nur geringe Änderungen im TEX-Manuskript. Eben-
...
so wichtig ist es oft, dass das TEX-Manuskript selbst ei-
Nun können wir intuitiv Kanten zwischen den Knoten ne gut lesbare Beschreibung der Graphstruktur darstellt
zeichnen und erhalten ein fast perfektes Ergebnis: und sich deshalb auch gut weitergeben lässt. Ein gewich-
\draw [->] (A) -- (B); tiges Problem bleibt jedoch bestehen: Die Koordinaten
\draw [->] (B) -- (C); der Knoten müssen explizit angegeben werden. Bei ei-
\draw [->] (C) -- (D); nem Graphen mit fünf Knoten mag dies vertretbar sein,
\draw [->] (D) -- (E); bei größeren Graphen verbringt man jedoch schnell viel
\draw [->] (E) -- (A);
Zeit damit, durch die liebevoll millimeterweise Umposi-
tionierung von Knoten, Zeichnungen zu perfektionieren.
x1 Ein ganzes Teilgebiet der Informatik, das Algorithmi-
sche Graphzeichnen (algorithmic graph drawing), beschäf-
xn x2 tigt sich mit der Berechnung optimaler Positionierungen
von Knoten eines Graphen in der Ebene – hierzu tagt seit
über 20 Jahren jährlich die Graph Drawing Konferenz. Es
gibt eine Vielzahl von Büchern zu dem Thema und noch
xn−1 ...
mehr Software-Pakete. Allen in diesem Kontext vorge-
schlagenen Algorithmen ist jedoch gemein, dass sie kom-
plex und oft auch zeitintensiv sind. Auf jeden Fall sind sie
Die Kanten sind, wie wir es ja auch spezifiziert ha- deutlich zu komplex, als dass sie, so wie der Rest von
ben, gerade Strecken; wohingegen wir eigentlich ger- TikZ,direkt in TEX implementiert werden könnten. Es er-
ne Kreisbögen hätten. Dies erreichen wir dadurch, dass schien daher bei der Konzeption von TikZ aussichtslos,
wir -- durch den generischen, konfigurierbaren, wohl- dass TikZ sich jemals selbst um die Positionierung von
benannten Operator edge ersetzen. Diesem können wir Knoten würde kümmern können.

38 FOKUS MDMV 22 / 2014 | 35–40


Eine „algorithmische Wende“ begann um das Jahr 2008, Wie man sieht, positioniert der Algorithmus die Kno-
als sich LuaTEX zu etablieren begann, eine Fortentwick- ten gegen den Uhrzeigersinn, obwohl wir sie gerne im
lung des weitverbreiteten pdfTEX. LuaTEX reichert TEX Uhrzeigersinn hätten. Weiterhin könnten die Abstände
um einen neuen Befehl an: \directlua. Dieser nimmt zwischen den Knoten größer sein. Diese und viele weite-
ein beliebiges in der Programmiersprache Lua verfasstes re algorithmische Parameter lassen sich durch geeignete
Programm als Parameter und führt es aus – und in Lua ist Optionen beeinflussen.
die Implementation komplexer Algorithmen gut möglich.
Die Einführung des algorithmischen Graphzeichnens in
Nach mehreren Jahren Entwicklung ist Anfang 2014 die TikZ wurde auch genutzt, um die bestehende Syntax für
Version 3.0.0 von TikZ erschienen, die als erste die Kunst Knoten und Kanten einer kritischen Betrachtung zu un-
des algorithmischen Graphzeichnens beherrscht. Hier- terziehen. Zwar eignen sich nodes und edges gut dafür,
für muss zunächst eine spezielle TikZ-Bibliothek geladen Graphen zu spezifizieren, sie werden aber syntaktisch mit
werden: normalen Pfadbeschreibungen gemischt. Diese Mischung
\usetikzlibrary{graphdrawing} erzwingt eine Reihe syntaktischer Kompromisse, die an-
dere Formate nicht machen müssen. So zeigt das DOT-
Diese (und nur diese) setzt voraus, dass LuaTEX genutzt Format schön auf, wie man Graphen auch kompakter be-
wird, da die Algorithmen zum Graphzeichnen wie er- schreiben kann: Ein Kreis aus fünf Knoten mit Beschrif-
wähnt in der Programmiersprache Lua verfasst sind. Da tungen A bis E lässt sich in diesem Format beschreiben
es sehr viele Algorithmen zum Zeichnen von Graphen als A -> B -> C -> D -> E -> A; man vergleiche dies
gibt, muss als nächstes wiederum eine passende „Graph- mit den zehn Zeilen weiter oben.
Drawing“ (gd) Bibliothek geladen werden. Für unsere
Zwecke wird dies circular sein, welche Algorithmen Parallel zur Einführung des algorithmischen Graphzeich-
enthält, die Knoten „in Kreisen“ anordnen: nens hat deshalb auch eine neue Syntax zur Beschreibung
\usegdlibrary{circular} von Graphen bei TikZ Einzug gehalten, die die Vortei-
le des DOT-Formats aufgreift und an TikZ anpasst. Um
Daneben gibt es bereits Bibliotheken speziell für das diese neue Syntax zu nutzen, muss zunächst wieder eine
Zeichnen von allgemeinen Bäumen, von phylogenetischen Bibliothek geladen werden:
Bäumen, von geschichteten Graphen und von ganz belie-
bigen Graphen mittels generischer Ansätze. \usetikzlibrary{graphs}

Wir können nun TikZ bitten, für einen Graphen (oder Sie stellt den \graph-Befehl zur Verfügung. Er nimmt
auch nur für einen Teil) die Knotenpositionen selbst zu als Parameter eine Beschreibung eines Graphen in ei-
berechnen. Dazu übergeben wir dem Bild eine geeigne- ner Variante der DOT-Notation und erzeugt daraus ganz
te Option, in unserem Fall mit dem leicht wunderlichen normale nodes und edges. Die Beschreibung des Gra-
Namen simple necklace layout. Er deutet an, dass (a) phen besteht aus Folgen von Knoten, deren Beschrif-
die Knoten wie auf einer Kette im Kreis angeordnet wer- tungen einfach direkt angegeben werden, getrennt durch
den sollen und (b) eine simple Variante der hierfür mög- spezielle Kantensymbole wie -> oder -- oder auch <-.
lichen Algorithmen genutzt werden soll. Ansonsten kann Kommt eine Beschriftung mehrfach vor, so wird ange-
die Beschreibung des Graphen gleich bleiben, einzig die nommen, dass es sich um denselben Knoten handelt, wo-
Koordinatenangaben für die Knoten entfernen wir: durch sich leicht Pfade durch den Graphen spezifizieren
\begin{tikzpicture}[simple necklace layout] lassen. Schließlich lassen sich noch Knotennamen in dop-
\node [circle, draw] (A) {$x_1$}; pelte Anführungszeichen einschließen, wenn sie Symbole
\node [circle, draw] (B) {$x_2$}; enthalten, die in TEX eine besondere Bedeutung haben.
\node [circle] (C) {$\dots$};
\node [circle, draw] (D) {$x_{n-1}$}; Unser Beispielgraph lässt sich nach diesen Vorbemerkun-
\node [circle, draw] (E) {$x_n$};
gen sehr kompakt darstellen:
\draw (A) edge[bend right=17, ->] (B);
\draw (B) edge[bend right=17, ->] (C);
\graph { "$x_1$" -> "$x_2$" -> "$\dots$" ->
\draw (C) edge[bend right=17, ->] (D);
"$x_{n-1}$" -> "$x_n$" -> "$x_1$" };
\draw (D) edge[bend right=17, ->] (E);
\draw (E) edge[bend right=17, ->] (A);
\end{tikzpicture} Diese knappe Beschreibung können wir elegant in eine
Kurzvariante der {tikzpicture}-Umgebung einbauen:
Dem \tikz-Befehl darf ein einzelner Grafikbefehl folgen,
x1 für den dann ein eigenes Bild erstellt wird. Aus
x2 xn \tikz [simple necklace layout]
\graph { "$x_1$" -> "$x_2$" -> "$\dots$" ->
... xn−1
"$x_{n-1}$" -> "$x_n$" -> "$x_1$" };

wird die Zeichnung

MDMV 22 / 2014 | 35–40 FOKUS 39


x1 beliebiger Pfade krümmen kann; es muss einfach bend hin-
x2 xn zugefügt werden.

... xn−1 5 Ausblick

Der Umfang von TikZ macht es unmöglich, in einem ein-


Mit der neuen Syntax scheint zunächst die Möglichkeit zigen Artikel all seine Möglichkeiten vorzustellen. So ist
verloren gegangen zu sein, das Aussehen der Knoten zu zum Beispiel das umfangreiche neue Teilsystem zum Er-
kontrollieren. Dies ist aber immer noch möglich. Zu- stellen von Plots ebenso unerwähnt geblieben, wie die
nächst lässt sich mit den Optionen nodes und edges ge- Möglichkeiten zur Erstellung komplexer eigener Grafik-
nerell festlegen, wie Knoten und Kanten aussehen sol- Stile und Grafik-Elemente. TikZ kann natürlich auch
len. Zusätzlich kann jeder Knoten und jede Kante lokale gut mit Farben umgehen, Pfade können eingefärbt oder
Optionen haben, die ihnen einfach in eckigen Klammern mit Farbverläufen gefüllt werden, können halbtransparent
folgen. Der komplette Code für Abbildung 1 lautet: sein, mit bunten Mustern gefüllt werden und vieles mehr.
\tikz[% Waehle den Graphzeichnen-Algorithmus: Selbst das Thema „algorithmisches Graphzeichnen“
simple necklace layout, konnte in diesem Artikel nur angeschnitten werden.
% Knoten im Uhrzeigersinn, oben beginnend: So erlaubt die Syntax des \graph-Befehls beispielsweise
grow’ = down, auch eine leichte und elegante Beschreibung von Bäumen,
% Abstand zwischen den Knoten: die sicherlich eine der wichtigsten und am häufigsten ge-
node sep = 5mm,
zeichneten Graphklassen bilden. Als ein Beispiel hier der
% Passe Puffer um die Beschriftungen an:
inner sep = 1pt, Code für einen binären Suchbaum:
% Etwas dickere Linien: \tikz [binary tree layout]
semithick, \graph { r
% Konfiguriere, wie Pfeile aussehen: r -> {
> = {Stealth[scale=1.5, bend, round, sep]}] c s
c -> { a, f -> e },
\graph[ nodes={minimum size=1cm, draw, circle}, s -> x[second] -> {u,z} a f x
edges={bend left=17, thin} ] }
{"$x_1$" -> "$x_2$" -> "$\dots$"[draw=none] -> }; e u z
"$x_{n-1}$" -> "$x_n$" -> "$x_1$" };
Um tiefer in TikZ einzusteigen, empfiehlt sich ein Blick in
Auf eine subtile Fähigkeit der aktuellen Version von TikZ
die einführenden Teile des Handbuchs – trotz seines Um-
erlaube ich mir, an dieser Stelle noch hinzuweisen, da sie
fangs. Es liegt als PDF-Dokument jeder Installation von
mathematisch interessant ist und meines Wissens nicht
TEX bei und enthält mehrere Tutorials, die schrittweise
in einer anderen Software vorhanden ist: Betrachtet man
und ausführlich in die wichtigsten Ideen einführen. Soll-
die Pfeilspitzen in Abbildung 1 ganz genau, so krümmen
te schließlich trotz der vielen Optionen und Bibliothe-
sie sich entlang des Bogens. Verantwortlich hierfür ist die
ken von TikZ ein Spezialproblem nicht lösbar erschei-
neue Option „bend“ in der Konfiguration der Pfeilspit-
nen, so finden sich im Comprehensive TEX Archive Network
zen. So unscheinbar sie erscheinen mag, so weitreichend
(WWW.CTAN.ORG, dem Zentralarchiv für TEX) auch noch
sind ihre mathematischen Effekte: Für jede einzelne „ge-
unzählige Erweiterungen für TikZ.
bogene“ Pfeilspitze wird zunächst ein lokales nichtlinea-
res Koordinatensystem installiert. In diesem System läuft
Prof. Dr. Till Tantau, Universität zu Lübeck, Institut für
eine Koordinatenachse entlang des Pfades (also entlang
Theoretische Informatik, Ratzeburger Allee 160, 23538 Lübeck
einer Bézier-Kurve), die andere Achse verläuft jeweils or- tantau@tcs.uni-luebeck.de
thogonal zur Tangente an diese Kurve. Wenn TikZ dann
beispielsweise ein Pfeilspitzen-Dreieck in diesem krumm- Till Tantau ist Professor für Theoretische Infor-
linigen Koordinatensystem zeichnet, so biegen sich die matik an der Universität zu Lübeck, seine For-
schungsschwerpunkte sind kleine Platzklassen
Seiten des Dreiecks entlang des Pfades. Vorteil dieses und platzsparende Algorithmen auf Graphde-
recht aufwändigen Vorgehens – Metafont behilft sich bei- kompositionen. Mit der Programmierung in und
spielsweise mit dem Trick, einfach das Ende des Pfades für TEX begann er während seines Informatik-
und Mathematik-Studiums; die ersten Versionen
um einen bestimmten Winkel nach links und rechts zu
der Pakete TikZ und BEAMER erstellte er für
drehen, um ein entlang des Pfades gekrümmtes Dreieck seine Promotion über strukturelle Gemeinsamkeiten der Aufzähl-
zu erhalten – ist, dass TikZ beliebige Pfeilspitzen entlang barkeitsklassen von Turing-Maschinen und endlichen Automaten.

40 FOKUS MDMV 22 / 2014 | 35–40

Das könnte Ihnen auch gefallen