Grundlagen von TikZ

TikZ ist das Standardsystem, um Vektorgrafiken direkt in LaTeX als Code zu zeichnen. Koordinaten, Linien, Kreise, Pfeile und Nodes stehen im selben Quelltext wie Ihre Prosa, und die Abbildung wird mit denselben Schriften und derselben Qualität wie der umgebende Text gesetzt. Kein Hin und Her mit einem separaten Zeichenprogramm; Ihre Abbildungen werden ein reproduzierbarer Teil des Dokuments — darum geht es auf dieser Seite.

PGF und TikZ

Zuerst die Namen. Unten liegt PGF (Portable Graphics Format), eine Low-Level-Grafikengine, die tatsächlich die Linien zeichnet und dabei Treiberunterschiede wie PDF gegen DVI ausgleicht. Rohes PGF direkt zu schreiben ist mühsam. TikZ ist daher die angenehme Frontend-Schicht (Makroebene) über PGF. Beide wurden von Till Tantau geschaffen.

Der Name TikZ ist ein rekursives GNU-artiges Akronym für das Deutsche „TikZ ist kein Zeichenprogramm“. Die Aussprache ist offiziell nicht festgelegt; man hört /tiks/, /tikts/ oder /tik-zee/. In der Praxis spricht man von „PGF/TikZ“ als einer Einheit, und was wir tatsächlich schreiben, ist fast immer die TikZ-Seite.

Der Einstieg ist einfach: Schreiben Sie \usepackage{tikz} in den Vorspann, und PGF wird mitgeladen. Mit pdfLaTeX, LuaLaTeX und XeLaTeX funktioniert es direkt. Nur wenn Sie über DVI gehen, etwa mit pLaTeX oder upLaTeX, geben Sie zusätzlich einen Treiber, meist dvipdfmx, als Klassenoption an.

document.tex
\documentclass{article}   % pLaTeX なら \documentclass[dvipdfmx]{jsarticle}
\usepackage{tikz}
\begin{document}
We are working on
\begin{tikzpicture}
  \draw (-1.5,0) -- (1.5,0);
  \draw (0,-1.5) -- (0,1.5);
\end{tikzpicture}.
\end{document}

Dies setzt den Text „We are working on“, zeichnet dann direkt in derselben Zeile ein kleines Kreuz, also eine horizontale und eine vertikale Linie durch den Ursprung, und schließt mit einem Punkt. Dieses Verschmelzen einer Abbildung mit der Textzeile ist typisch für TikZ.

Die tikzpicture-Umgebung

Jede Abbildung wird in der tikzpicture-Umgebung (\begin{tikzpicture}\end{tikzpicture}) gezeichnet. Sie ist die „Leinwand“ für ein Bild; darin listen Sie die Zeichenbefehle. In den eckigen Klammern nach dem Umgebungsnamen können Optionen stehen, die für das ganze Bild gelten, etwa [scale=2] für doppelte Größe oder [thick] für insgesamt stärkere Linien.

Für eine winzige einzeilige Abbildung müssen Sie die Umgebung nicht öffnen: Es gibt die Inline-Formen \tikz{...} und für einen einzelnen Befehl \tikz \draw ...;. Welche Form Sie auch nutzen, eine Regel dürfen Sie nie vergessen: Jeder Zeichenbefehl endet mit einem Semikolon ;. Das Semikolon markiert „dieser Pfad endet hier“; es zu vergessen ist ein Fehler und der häufigste Stolperstein am Anfang.

latex
% 行内(インライン)
\tikz \draw (0,0) -- (1.5,0);

% 環境(複数のコマンド)
\begin{tikzpicture}
  \draw (-1.5,0) -- (1.5,0) -- (0,-1.5) -- (0,1.5);
\end{tikzpicture}

Das Pfadmodell — Koordinaten und Operationen

Zeichnen in TikZ dreht sich um den Pfad: eine Route, die beschreibt, wie man von Punkt zu Punkt geht. Der Befehlsname entscheidet, wie diese Route sichtbar wird. \draw zeichnet den Pfad als Linie, \fill füllt das Innere eines geschlossenen Pfads, \filldraw füllt und zeichnet dann den Umriss, und \path definiert nur den Pfad, ohne etwas zu zeichnen, nützlich für Koordinaten oder Nodes, auf die später verwiesen wird.

Es gibt drei Arten, einen Punkt anzugeben. Kartesisch (x,y) nutzt standardmäßig Zentimeter; (1,2) bedeutet also 1 cm nach rechts und 2 cm nach oben. Einheiten können Sie wie in (1cm,2pt) explizit nennen. Polar (angle:radius) liest sich als „in diese Richtung, so weit“, etwa (30:1cm). Benennen Sie einen Punkt, also eine benannte Koordinate, können Sie ihn später per Name abrufen. Relative Schritte gibt es auch: ++(1,0) geht 1 cm nach rechts *und* aktualisiert den aktuellen Punkt, während +(1,0) relativ zum Startpunkt ist, ohne ihn zu aktualisieren.

Pfadoperationen legen fest, wie die Route verläuft. -- zeichnet eine gerade Linie vom vorherigen Punkt zum nächsten, etwa als Kette (a) -- (b). rectangle erzeugt ein Rechteck aus zwei gegenüberliegenden Ecken, circle einen Kreis um ein Zentrum, ellipse eine Ellipse, arc einen Kreisbogen und grid ein Liniengitter. Kurven entstehen mit .. controls .. als Bézierkurve oder, wie später, mit to[bend]. Zum Schließen einer Form endet man mit -- cycle und kehrt zum Start zurück.

Moderne Formargumente werden als Schlüssel-Wert-Paare in [...] übergeben. Ein Kreis ist circle [radius=10pt], eine Ellipse ellipse [x radius=20pt, y radius=10pt], ein Bogen arc [start angle=0, end angle=30, radius=3mm] von 0° bis 30° mit Radius 3 mm. Bei grid setzt [step=.5cm] den Abstand. Das nächste Beispiel zeichnet ein feines Gitter, dann einen Kreis mit Radius 1 cm im Ursprung und eine Gerade vom Ursprung nach (1,1).

latex
\begin{tikzpicture}
  \draw[step=.5cm, gray, very thin] (-1.4,-1.4) grid (1.4,1.4);
  \draw (0,0) circle [radius=1cm];
  \draw (0,0) -- (1,1);
  \fill[blue!20] (0,0) rectangle (0.5,0.5);
\end{tikzpicture}

Das Bild legt ein feines graues Gitter in 0,5-cm-Schritten von (-1.4,-1.4) bis (1.4,1.4), darüber einen Kreis mit Mittelpunkt im Ursprung, eine Diagonale vom Ursprung nach (1,1) und ein kleines 0,5-cm-Quadrat am Ursprung in hellem Blau. blue!20 bedeutet „20% Blau“, also Blau mit Weiß gemischt.

Nodes — Text und Formen platzieren

Ein Node platziert Text oder eine Form an einer gegebenen Koordinate und ist das Arbeitspferd für Beschriftungen. Die Grundform lautet \node[options] (name) at (coordinate) {contents};. Optionen sind etwa draw für einen Rahmen, circle oder rectangle für die Form, fill=blue!20 für eine Füllung usw. Der Name in Klammern wird zum Handle des Nodes; später können Sie Positionen wie (name) oder (name.north) referenzieren.

Ein Muster, das ständig vorkommt: Zuerst benannte Nodes platzieren, danach die Namen mit Linien verbinden. Weil Sie über Node-Namen statt Rohkoordinaten verbinden, folgen die Verbindungslinien automatisch, wenn Sie die Anordnung ändern.

latex
\begin{tikzpicture}
  \node (a) at (0,0)   [draw, circle, fill=blue!20] {A};
  \node (b) at (2.5,0) [draw, circle, fill=blue!20] {B};
  \draw[->] (a) -- (b);
\end{tikzpicture}

Dies zeichnet zwei hellblaue Kreisnodes mit den Labels „A“ und „B“ im Abstand von 2,5 cm und eine Pfeillinie von A nach B. Die Linie stoppt sauber am Rand jedes Nodes, statt in die Kreise hineinzuragen.

Nodes können auch entlang eines Pfads sitzen. \draw (a) -- (b) node[midway] {label}; setzt ein Label am Mittelpunkt (midway) der Linie von a nach b; mit above oder below verschieben Sie es von der Linie weg. Das ist die Standardform zum Beschriften einer Verbindung.

Optionen und Stile

Das Aussehen einer Linie steuern Sie mit Optionen in Klammern. Häufig sind die Stärken thin / thick / very thick, Farben wie red oder blue!50, dashed oder dotted, rounded corners und Pfeile. Pfeile sind -> für eine Spitze am Ende, <- am Anfang und <-> an beiden Enden. TikZ ist pragmatisch: Jede unbekannte Option, die ein - enthält, wird als Pfeilspezifikation verstanden.

OptionBedeutung
thick / very thickStärkere Linien (bis ultra thick)
red, fill=blue!50Linien- oder Füllfarbe (!n setzt Intensität)
dashed / dottedGestrichelte oder gepunktete Linien
rounded cornersEcken eines Pfads abrunden
->, <-, <->Pfeilspitze am Ende, Anfang oder an beiden Enden
scale=2Dieses Bild oder diesen Pfad um Faktor 2 skalieren

Wenn Sie dieselbe Dekoration wiederholen, ist es üblich, sie als Stil zu benennen und wiederzuverwenden. Definieren Sie sie im Vorspann mit \tikzset{name/.style={...}} oder direkt in den Optionen von tikzpicture. Das nächste Beispiel definiert einen Stil help lines und wendet ihn auf ein Gitter an.

latex
\tikzset{help lines/.style={color=blue!50, very thin}}

\begin{tikzpicture}
  \draw[help lines] (0,0) grid (3,2);
  \draw[thick, red, ->, rounded corners] (0,0) -- (1,2) -- (3,2);
\end{tikzpicture}

Dies zeichnet ein hellblaues Gitter von (0,0) bis (3,2), dann eine dicke rote Linie vom Ursprung nach (1,2) und weiter nach (3,2), mit abgerundeten Ecken und Pfeilspitze am Ende. Weil das Gitter einen Stil nutzt, ändert ein Wechsel von very thin zu thin das ganze Gitter an einer Stelle.

Bibliotheken — benötigte Funktionen laden

Der Kern von TikZ ist bewusst klein gehalten; spezialisierte Funktionen sind in Bibliotheken ausgelagert, die Sie im Vorspann mit \usetikzlibrary{...} laden, mehrere durch Kommas getrennt. Die wichtigsten sind:

  • arrows.meta — eine reiche, einstellbare Sammlung von Pfeilspitzen (-{Stealth}, -{Latex}, …). Die ältere Bibliothek arrows ist veraltet; verwenden Sie heute diese.
  • positioning — relative Node-Platzierung, sodass right=of a oder below=1cm of b möglich ist.
  • calc — Koordinatenrechnung: ($(a)+(1,0)$) bedeutet „1 cm rechts von a“, ($(a)!0.5!(b)$) „der Mittelpunkt von a und b“.
  • shapes — viele Node-Formen jenseits von Kreis und Rechteck, etwa Rauten, Sterne und Callouts; unterteilt z. B. in shapes.geometric.
  • decorations — Pfade als Welle, Zickzack, Klammer und mehr dekorieren, z. B. decorations.pathmorphing.
  • patterns — Füllungen mit Mustern wie Schraffuren, Linien oder Punkten.
  • fit — automatisch eine Box bauen, die mehrere Nodes umschließt.
  • backgrounds — Rahmen oder Hintergründe auf einer Hintergrundebene hinter dem Bild zeichnen.
  • matrix — Nodes in einem Gitter anordnen; graphdrawing übernimmt automatisches Layout und benötigt LuaTeX.

Das nächste Beispiel ist ein kleines Flussdiagramm mit arrows.meta und positioning. Nur der erste Node bekommt eine Koordinate; die übrigen werden relativ platziert, etwa „rechts“ oder „unten“, und mit Pfeilspitzen im Stil Stealth verbunden.

document.tex
\usepackage{tikz}
\usetikzlibrary{arrows.meta, positioning}

\begin{tikzpicture}[node distance=1cm, every node/.style={draw, rounded corners}]
  \node (start)            {Start};
  \node (proc)  [right=of start] {Process};
  \node (end)   [right=of proc]  {End};
  \draw[-{Stealth}] (start) -- (proc);
  \draw[-{Stealth}] (proc)  -- (end);
\end{tikzpicture}

So entsteht ein Flussdiagramm von links nach rechts: drei abgerundete Boxen mit den Labels „Start“, „Process“ und „End“, 1 cm auseinander, der Reihe nach mit scharfen Stealth-Pfeilspitzen verbunden. Der Kniff ist every node/.style, das allen Nodes auf einmal ein gemeinsames Aussehen gibt.

Kompilierkosten und externalize

Da LaTeX TikZ-Abbildungen Element für Element berechnet und zeichnet, machen komplexe Bilder oder viele davon die Kompilierung spürbar langsam. Plots und dichte Gitter sind besonders schwer.

Das Standardmittel ist die externalize-Bibliothek. Laden Sie \usetikzlibrary{external} und deklarieren Sie \tikzexternalize; dann wird jedes tikzpicture einmal in ein eigenes PDF kompiliert und zwischengespeichert. Bei späteren Läufen überspringt TikZ die Berechnung, wenn sich der Inhalt nicht geändert hat, und bindet nur das fertige PDF ein. Der erste Lauf ist langsam, die folgenden Bearbeitungszyklen werden deutlich schneller; geänderte Abbildungen werden automatisch neu erzeugt. Alternativ können große Abbildungen in eigene Dateien ausgelagert und mit der Klasse standalone einzeln kompiliert werden.