Vektorgrafiken mit LaTeX und TikZ erstellen

Aus LinuxUser 07/2014

Vektorgrafiken mit LaTeX und TikZ erstellen

© Lusi, freeimages.com

Blaupause

Mit LaTeX und dem Paket TikZ erstellen Sie hochwertige Vektorgrafiken, mit denen Sie Ihre Dokumente aufwerten und Inhalte ansprechend visualisieren.

LaTeX eignet sich nicht nur für schnöden, grauen Textsatz. Mit den richtigen Paketen bringen Sie Farbe [1] ins Spiel und binden bei Bedarf externe Grafiken [2] ein. Das Paket TikZ [3] ermöglicht es, Vektorgrafiken mit LaTeX zu erzeugen. Dieses Paket setzt seinerseits auf das Paket PGF auf und vereinfacht dessen Nutzung.

Nutzen Sie TikZ zum Erstellen der Grafiken, erhalten Sie mit wenigen Codezeilen hochwertige Illustrationen, die sich perfekt in das Schriftbild von LaTeX einfügen. Dafür müssen Sie allerdings den Nachteil in Kauf nehmen, nicht sofort zu wissen, wie die Grafik aussieht, an der Sie gerade arbeiten: Jede Änderung setzt erst einen LaTeX-Lauf voraus. Das Programm KTikZ [4] schafft in diesem Fall Abhilfe, der Editor zeigt die Grafik direkt an (Abbildung 1).

Abbildung 1: Der Editor KTikZ ermöglicht es, erzeugte Grafiken sofort anzusehen.

Abbildung 1: Der Editor KTikZ ermöglicht es, erzeugte Grafiken sofort anzusehen.

Der Einsatz fällt leicht: Sie laden mit dem Befehl \usepackage{tikz} in der Präambel das entsprechende Paket. Die Befehle, mit denen Sie Grafiken erstellen, stehen im Hauptteil in der Umgebung tikzpicture (Listing 1, Zeile 1 bis 3). Alternativ nutzen Sie den Befehl aus Listing 1, Zeile 4. Das ist dann sinnvoll, wenn Sie nur wenige Befehle für die Grafik verwenden.

Listing 1

\begin{tikzpicture}[Optionen]Befehle
\end{tikzpicture}
\tikz[Optionen]{Befehle}

Die Tabelle “Optionen” zeigt, wie Sie die Ausgabe beeinflussen dürfen. Diese Optionen stehen auch bei einem einzelnen Befehl bereit, wobei sie dann nur für die Grafik gelten, die Sie mit dem entsprechenden Befehl erzeugen. Umgekehrt besteht die Möglichkeit, Optionen, die bei den einzelnen Befehlen zum Einsatz kommen, global einzutragen. Diese gelten dann statt für die einzelne Grafik für alle Grafiken in der Umgebung.

Optionen

Option Wirkung
scale=Faktor Vergrößern um den angegebenen Faktor. Zum Verkleinern negativen Faktor wählen.
rotate=Winkel Drehung um den angegebenen Winkel.
baseline=Wert Statt des untersten Punktes der Grafik liegt der angegebene Wert auf der Grundlinie.

Linien

Der Befehl, mit dem Sie Linien, Bézier-Kurven und Figuren zeichnen, ist nach dem Schema \draw[Optionen] Pfad; aufgebaut. Über Optionen passen Sie den Stil der Linien und deren Farbe an. Was Sie als Pfad eintragen, variiert je nach Grafik, die Sie erstellen wollen.

Listing 2 enthält einige Beispiele für Linien und Bézier-Kurven. Die Punkte, mit denen Sie eine Grafik konstruieren, geben Sie in runden Klammern an. Dabei dürfen Sie die Koordinaten des Punkts durch Komma getrennt angeben (Zeile 1). Setzen Sie keine Einheit für die Längen, interpretiert der Compiler die Zahlen als Einheiten im Koordinatensystem, wobei eine Einheit einem Zentimeter entspricht.

Listing 2

\tikz{\draw (0,0) -- (2,2) (0,0) |- (2,2);}
\tikz{\draw (0,0) -- (45:2.83cm) (0,0) |- (45:2.83cm);}
\tikz{\draw (0,0) -- ++(2,2) ++(-2,-2) |- ++(2,2);}
\tikz{\draw (0,0) |- (2,2) -- cycle;}
\tikz{\draw (-2,0) .. controls (-1,1) and (1,1) .. (2,0);}
\tikz{\draw (0,0) circle (2cm);}
\tikz{\draw (0,0) arc (30:60:2cm);}
\tikz{\draw (0,0) ellipse (2cm and 1cm);}
\tikz{\draw (0,0) rectangle (4,4);}

Alternativ geben Sie die Polarkoordinaten durch einen Doppelpunkt getrennt an (Zeile 2). Das ändert jedoch die Bedeutung: Vor dem Doppelpunkt steht nun der Winkel, nach dem Doppelpunkt die Entfernung.

Standardmäßig gilt der Mittelpunkt eines Koordinatensystems als Ausgangspunkt, relativ zu dem Sie alle anderen Punkte definieren. Tragen Sie vor der runden Klammer ein doppeltes Pluszeichen (++) ein, erscheint der Punkt in der Klammer relativ zum davor verwendeten Punkt (Zeile 3).

Die Zeilen 1 bis 4 von Listing 2 erzeugen alle die gleiche Grafik, jedoch auf vier verschiedene Weisen. Der Code in Zeile 1 zeichnet mittels des Befehls -- eine gerade Linie zwischen den Punkten (0,0) und (2,2).

Das Kommando |- sorgt dafür, dass dies keine direkte Verbindung zwischen den beiden Punkten ist, sondern eine, die nur aus einer Horizontalen und einer Vertikalen besteht, wobei ein vorangestellter Bindestrich bewirkt, dass vom ersten Punkt aus eine Horizontale und dann eine Vertikale entsteht; ein dem Pipe-Zeichen nachfolgender Strich zeichnet zunächst eine Vertikale und dann eine Horizontale.

Beide Befehle aus Zeile 1 zusammen ergeben ein rechtwinkliges Dreieck. Zeile 2 definiert das gleiche Dreieck mit Polarkoordinaten. Ausgehend vom Punkt (0,0) entsteht hier im Winkel vom 45 Grad eine 2,83 cm lange Linie, anschließend vom Punkt (0,0) eine Vertikale auf Höhe des Endpunktes der vorher gezeichneten Geraden, und schließlich eine Horizontale zu diesem Punkt hin, sodass die rechtwinklige Spitze des Dreiecks entsteht.

In Zeile 3 erstellen die Befehle wiederum das gleiche Dreieck, wobei diesmal die einzelnen Punkte relativ zum jeweils vorhergehenden Punkt liegen. Zeile 4 erstellt schließlich zunächst die rechtwinklige Spitze des Dreiecks. Die Grundlinie kommt durch den Befehl -- cycle zustande, der die beiden Enden zu einer geschlossenen Figur verbindet.

Neben geraden Linien lassen sich auch Kurven zeichnen. Eine solche geben Sie durch vier Punkte an (Listing 2, Zeile 5). Die erste runde Klammer enthält den Startpunkt, die vierte den Endpunkt. Die beiden Kontrollpunkte stehen in den beiden mittleren Klammern.

Geometrische Figuren

Linien und Kurven erlauben es nun, jede beliebige Figur zu erstellen. Listing 2 zeigt in Zeile 6 den Befehl für einen Kreis: In der ersten runden Klammer geben Sie den Mittelpunkt an, in der zweiten den Radius.

Möchten Sie statt eines ganzen Kreises nur einen Kreisbogen zeichnen, nutzen Sie den Befehl aus Zeile 7. Zunächst geben Sie wiederum den Mittelpunkt in der ersten runden Klammer an, anschließend in der zweiten runden Klammer den Winkel, an dem der Teil des Kreisbogens beginnt, und schließlich den Winkel, an dem er endet sowie den Radius.

Den Befehl für eine Ellipse enthält Zeile 8. In die erste runde Klammer gehört hier der Mittelpunkt, in der zweiten runden Klammer folgen zunächst die Länge der Hauptachse und dann die Länge der Nebenachse.

Zeile 9 zeigt den Befehl für ein Rechteck. Die erste runde Klammer nennt den linken unteren Punkt, die zweite runde Klammer den rechten oberen.

Auf den Millimeter genau

Außerdem hält LaTeX einen Befehl bereit, um ein Gitternetz zu erzeugen. So können Sie ein Koordinatensystem erstellen oder beispielsweise auch Millimeterpapier generieren.

Listing 3

\begin{tikzpicture}
\draw[step=1mm,help lines] (0,0) grid (50mm,50mm);
\draw[step=10mm] (0,0) grid (50mm,50mm);
\end{tikzpicture}

Der Befehl in Zeile 2 von Listing 3 veranlasst LaTeX, ein Gitternetz mit Einteilungen von einem Millimeter zu zeichnen. Die Option help lines bewirkt, dass LaTeX die Linien dünn und grau zeichnet. Die Koordinaten in der ersten runden Klammer geben die linke untere Ecke der Grafik an, die Koordinaten in der zweiten runden Klammer die rechte obere Ecke. Über dieses Netz ziehen Sie durch den Befehl in Zeile 3 ein weiteres mit Linien in normaler Dicke und Einteilungen von zehn Millimetern (Abbildung 2).

Abbildung 2: Mit nur wenigen Zeilen LaTeX-Code erzeugen Sie schnell und einfach Millimeterpapier.

Abbildung 2: Mit nur wenigen Zeilen LaTeX-Code erzeugen Sie schnell und einfach Millimeterpapier.

Linienstil

Die Tabelle “Von dünn nach breit” enthält eine Übersicht über die Befehle, die Sie als Option angeben dürfen, um die Liniendicke anzupassen. Listing 4 zeigt ein Beispiel, das parallele Linien unterschiedlicher Dicke zeichnet.

Von dünn nach breit

Befehl Dicke
line width=<§§I>Dicke<§§I> gemäß des angegebenen Werts
ultra thin 0,1 Punkt
very thin 0,2 Punkt
thin 0,4 Punkt
semithick 0,6 Punkt
thick 0,8 Punkt
very thick 1,2 Punkt
ultra thick 1,6 Punkt

Listing 4

\begin{tikzpicture}
\draw[ultra thin] (0,0) -- (6,0);
\draw[very thin] (0,0.5) -- (6,0.5);
\draw[thin] (0,1) -- (6,1);
\draw[semithick] (0,1.5) -- (6,1.5);
\draw[thick] (0,2) -- (6,2);
\draw[very thick] (0,2.5) -- (6,2.5);
\draw[ultra thick] (0,3) -- (6,3);
\draw[line width=2pt] (0,3.5) -- (6,3.5);
\end{tikzpicture}

Neben der Strichbreite dürfen Sie zusätzlich das Muster der Linie anpassen. Die Tabelle “Gemustert” enthält eine Übersicht der möglichen Befehle. Listing 5 zeigt ein Beispiel, Abbildung 3 das Ergebnis.

Gemustert

Befehl Muster
solid durchgezogene Linie (voreingestellt)
dash pattern=on <§§I>Breite<§§I> off <§§I>Breite<§§I> gestrichelte Linie bestehend aus Strichen der bei on angegebenen Breite und Aussparungen der bei off angegebenen Breite
dotted gepunktete Linie
densely dotted dicht gepunktete Linie
loosely dotted breit gepunktete Linie
dashed gestrichelte Linie
densely dashed dicht gestrichelte Linie
loosely dashed breit gestrichelte Linie
dashdotted Muster aus Abfolge von Strich und Punkt
densely dashdotted dichtes Muster aus Abfolge von Strich und Punkt
loosely dashdotted breites Muster aus Abfolge von Strich und Punkt
dashdotdotted Muster aus Abfolge von einem Strich und zwei Punkten
densely dashdotdotted dichtes Muster aus Abfolge von einem Stricht und zwei Punkten
loosely dashdotdotted breites Linienmuster aus Abfolge von einem Stricht und zwei Punkten

Listing 5

\begin{tikzpicture}
\draw[solid] (0,0) -- (6,0);
\draw[dash pattern=on 5mm off 2mm] (0,1) -- (6,1);
\draw[dotted] (0,2) -- (6,2);
\draw[densely dotted] (0,3) -- (6,3);
\draw[loosely dotted] (0,4) -- (6,4);
\draw[dashed] (0,5) -- (6,5);
\draw[densely dashed] (0,6) -- (6,6);
\draw[loosely dashed] (0,7) -- (6,7);
\draw[dashdotted] (0,8) -- (6,8);
\draw[densely dashdotted] (0,9) -- (6,9);
\draw[loosely dashdotted] (0,10) -- (6,10);
\draw[dashdotdotted] (0,11) -- (6,11);
\draw[densely dashdotdotted] (0,12) -- (6,12);
\draw[loosely dashdotdotted] (0,13) -- (6,13);
\end{tikzpicture}

Abbildung 3: LaTeX bringt Befehle für verschiedene Muster der Linien mit.

Abbildung 3: LaTeX bringt Befehle für verschiedene Muster der Linien mit.

Es besteht die Möglichkeit, Linien als Pfeile zu gestalten. Dazu zeigt Listing 6 zwei Beispiele. Das Aussehen des Pfeils geben Sie als Option an. In der Mitte steht stets ein Bindestrich. Links des Bindestrichs definieren Sie den Anfang des Pfeils, rechts vom Bindestrich das Ende. Nutzen Sie dazu eine spitze Klammer für eine einfache Pfeilspitze, zwei spitze Klammern für eine doppelte Spitze und einen vertikalen Strich für ein einfaches Ende.

Listing 6

\tikz{\draw [|->] (0,0) -- (2,2);}
\tikz{\draw [->>] (0,0) arc (15:60:3cm);}

Außerdem können Sie angeben, wie die Enden der Linien aussehen sollen. Dazu nutzen Sie die Option line cap=<§§I>Stil<§§I>. Als Stile stehen butt (voreingestellt), rect und round bereit. Listing 7 enthält ein Beispiel, Abbildung 4 zeigt das Ergebnis.

Listing 7

\begin{tikzpicture}[line width=12pt]
\draw[line cap=butt] (0,0) -- (6,0);
\draw[line cap=rect] (0,1) -- (6,1);
\draw[line cap=round] (0,2) -- (6,2);
\end{tikzpicture}

Abbildung 4: Verschiedene Linienenden: <code srcset=

butt (unten), rect (Mitte), round (oben).” width=”300″ height=”131″ /> Abbildung 4: Verschiedene Linienenden: butt (unten), rect (Mitte), round (oben).

Mit der Option line join=<§§I>Stil<§§I> bestimmen Sie, wie Ecken aussehen sollen. Als Stile stehen miter (voreingestellt), bevel und round bereit. Listing 8 enthält ein Beispiel, Abbildung 5 zeigt das Ergebnis.

Listing 8

\begin{tikzpicture}[line width=12pt]
\draw[line join=miter] (0,0) -- (1,1) -- (0,2);
\draw[line join=bevel] (2,0) -- (3,1) -- (2,2);
\draw[line join=round] (4,0) -- (5,1) -- (4,2);
\end{tikzpicture}

Abbildung 5: Ecken können verschieden aussehen: <code srcset=

miter (unten), bevel (Mitte), round (oben).” width=”300″ height=”132″ /> Abbildung 5: Ecken können verschieden aussehen: miter (unten), bevel (Mitte), round (oben).

Die Farbe einer Linie verändern Sie, indem Sie die gewünschte Farbe als Option angeben. Das Paket tikz lädt automatisch das Paket xcolor, sodass Ihnen umfangreiche Möglichkeiten zum Einsatz von Farben zur Verfügung stehen.

Flächen

Flächen füllen Sie mit dem Befehl \fill[<§§I>Optionen<§§I>] <§§I>Pfad<§§I>;. Den Pfad beschreiben Sie mit den oben besprochenen Befehlen. Schließen Sie den Pfad nicht selbst, erledigt LaTeX das automatisch für Sie. Die Farbe, mit der Sie die Fläche füllen möchten, geben Sie als Option an, voreingestellt ist Schwarz. Listing 9 zeigt in der Zeile 1 ein Beispiel: Die Fläche eines Dreiecks erscheint in Blau. Den Befehl -- cycle dürfen Sie wie in Zeile 2 weglassen.

Es besteht die Möglichkeit, die beiden Befehle für Linien und Flächen zu kombinieren. Sie erhalten dann eine Figur, bei der sich Rand und Fläche von einander absetzen. Listing 9 zeigt in Zeile 3 ein Beispiel, in dem die Fläche eines Dreiecks mit einem hellen Grau gefüllt erscheint, die Außenlinien in einem dunklen Grau. Verzichten Sie auf den Befehl -- cycle wie in Zeile 4, schließt LaTeX nur die Fläche automatisch, nicht jedoch die Außenlinien.

Listing 9

\tikz{\fill[blue] (0,0) |- (2,2) -- cycle;}
\tikz{\fill[blue] (0,0) |- (2,2);}
\tikz{\filldraw[fill=lightgray,draw=darkgray,line width=1pt] (0,0) |- (2,2) -- cycle;}
\tikz{\filldraw[fill=lightgray,draw=darkgray,line width=1pt] (0,0) |- (2,2);}

Schatten

Über Schatten werten Sie Flächen optisch auf. Listing 10 zeigt ein Beispiel. Ersetzen Sie dazu \fill durch \shade (Zeile 1) beziehungsweise \filldraw durch \shadedraw (Zeile 2). Standardmäßig erstellt LaTeX Schatten durch einen Übergang von Grau zu Weiß von oben nach unten. Bei Bedarf passen Sie Farbe sowie Richtung des Schattens an. Zeile 3 erstellt einen Schatten von oben nach unten von Blau nach Grau, Zeile 4 einen von links nach rechts von Rot nach Grau und Zeile 5 einen von innen nach außen von Gelb nach Grau.

Listing 10

\tikz{\shade (0,0) circle (2);}
\tikz{\shadedraw (0,0) circle (2);}
\tikz{\shade[top color=blue, bottom color=gray] (0,0) circle (2);}
\tikz{\shade[left color=red, right color=gray] (0,0) circle (2);}
\tikz{\shade[inner color=yellow, outer color=gray] (0,0) circle (2);}

Abfolgen

Grafiken enthalten oft eine wiederkehrende Abfolge von Elementen. Das Zifferblatt einer Bahnhofsuhr (Abbildung 6) etwa ließe sich mit sechzig einzelnen Befehlen erstellen. Doch geht es auch einfacher mit nur zwei Befehlen (Listing 11, Zeilen 2 und 3).

Abbildung 6: Mit nur wenigen Zeilen LaTeX-Code erstellen Sie eine Bahnhofsuhr als Vektorgrafik.

Abbildung 6: Mit nur wenigen Zeilen LaTeX-Code erstellen Sie eine Bahnhofsuhr als Vektorgrafik.

Listing 11

\begin{tikzpicture}
\foreach \x in {6,12,...,360} {\draw[line width=1.2pt] (\x:1.85cm) -- (\x:2cm);}
\foreach \y in {30,60,...,360} {\draw[line width=4pt] (\y:1.55cm) -- (\y:2cm);}
\draw[line width=6pt] (0,0) -- (0:1.45cm);
\draw[line width=4pt] (0,0) -- (90:1.85cm);
\draw[line width=2pt,red] (0,0) -- (180:2cm);
\fill[line width=2pt,red] (-1.45,0) circle (2mm);
\fill[line width=2pt] (0,0) circle (2mm);
\end{tikzpicture}

Über Zeile 2 erzeugen Sie zunächst das Zifferblatt mit den kleinen Einheiten, die die Minuten symbolisieren. Der Abstand zwischen den einzelnen Strichen beträgt jeweils 6 Grad. Dazu kommt in der ersten geschweiften Klammer der Platzhalter \x zum Einsatz. Die Folge enthält Werte von 6 bis 360 Grad im Abstand von je 6 Grad. Die zweite geschweifte Klammer enthält den Befehl, der die Linien erstellt.

Zeile 3 generiert die längeren, dickeren Linien, die im Fünf-Minuten-Abstand das Zifferblatt ergänzen. Diese Linien liegen jeweils 30 Grad auseinander. Der Platzhalter \y enthält die Werte von 30 bis 360 Grad im Abstand von je 30 Grad. Die zweite geschweifte Klammer enthält den Befehl, der die Linien erstellt. In den Zeilen 4 bis 7 folgen die Befehle, die den Stunden-, Minuten- und Sekundenzeiger sowie den Punkt an der Verbindungsstelle der Zeiger erzeugen.

Textfelder

Listing 12 zeigt ein Beispiel für das Beschriften einer Grafik. Der Mittelpunkt des Texts liegt an der angegebenen Position. Da der Text auf diese Weise in die Grafik hineinragt, ist als Option die Position des Textes um den Punkt angegeben.

Listing 12

\tikz{\draw[|-|] (0,0) node[above left]{Start} -- (5,0) node[below right]{Ziel};}
\tikz{\path (0,0) node[draw,fill=yellow,align=center] {Text\\\textit{Text}\\$x+1$};}

Als vertikale Position stehen die Parameter above (über dem Punkt) oder below (unter dem Punkt) bereit, als horizontale Position left (links vom Punkt) oder right (rechts vom Punkt), wobei Sie die vertikale und horizontale Positionierung kombinieren dürfen.

Wenn Sie nur das Textfeld erstellen möchten, stellen Sie \path voran, wie in Zeile 2. Die Option draw zeichnet einen Rahmen um den Text, die Option fill=Farbe füllt diesen mit der angegebenen Farbe.

Über die Option align=Ausrichtung richten Sie den Text aus, wobei Sie die Wahl zwischen left (linksbündig), center (zentriert), right (rechtsbündig) und justify (Blocksatz) haben. Zum Formatieren des Texts stehen die üblichen LaTeX-Befehle einschließlich des Mathematik-Modus bereit.

Zuschneiden

Manchmal ist nur ein Teil einer Grafik von Bedeutung, sodass es sinnvoll wäre, der Einfachheit halber die gesamte Grafik zu erstellen, aber nur den relevanten Teil ins Dokument aufzunehmen. Das bietet sich etwa bei Funktionsgrafen an, bei denen es nur auf eine einzelne Schnittstelle ankommt.

Listing 13 zeigt zwei abgeänderte Zeilen für Listing 11. Damit vergrößern Sie die Grafik der Bahnhofsuhr um den Faktor drei (Zeile 1). Die darauf folgende Zeile schneidet einen 10 Millimeter großen Kreis um die Neun-Uhr-Markierung aus (Zeile 2), sodass Sie im Ergebnis nur diesen Bereich sehen.

Listing 13

\begin{tikzpicture}[scale=3]
\clip (-2,0) circle (10mm);
% [... weiter wie in Listing 11 ...]

Fazit

Mit den grundlegenden Funktionen von TikZ erstellen Sie schnell und einfach Vektorgrafiken mit LaTeX. Doch das Paket kann noch viel mehr: Über entsprechende Bibliotheken, die Sie zusätzlich laden, erstellen Sie nicht nur Kalender, Stundenpläne und Mindmaps, sondern auch Funktionsgrafen, Schaltpläne, Flussdiagramme und vieles mehr. So eignet sich TikZ nicht nur, um Texte mit Grafiken aufzulockern und zu visualisieren, sondern genügt selbst den gehobenen Ansprüchen wissenschaftlicher Texte. 

Infos

[1] Paket Xcolor: Daniel Tibi, “Kunterbunt”, LU 01/2014, S. 21, https://www.linux-community.de/31562

[2] Externe Grafiken in LaTeX integrieren: Frank Hofmann, “Bildhübsch”, LU 08/2013, S. 42, https://www.linux-community.de/29943

[3] TikZ: http://www.ctan.org/pkg/pgf

[4] KTikZ: http://www.hackenberger.at/blog/ktikz-editor-for-the-tikz-language

Der Autor

Daniel Tibi ist Benediktiner-Mönch der Abtei Kornelimünster in Aachen. Er studiert Theologie an der Ruhr-Universität Bochum und arbeitet dort am Lehrstuhl für Philosophisch-Theologische Grenzfragen. Als Wissenschaftler nutzt er gekonnt die umfangreichen Möglichkeiten von LaTeX aus. Neben seiner Tätigkeit an der Uni schreibt er als freier Autor über seine Erfahrungen mit dem Textsatzsystem.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 07/2014 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben