TikZ ist heute der De-facto-Standard fürs Zeichnen, aber nicht die einzige Option. Einige Zeichensysteme sind älter und haben weiterhin ihren Platz: PSTricks, das die Kraft von PostScript nutzt; der Diagramm-Veteran Xy-pic; Asymptote, eine eigenständige Sprache für 2D und 3D; und MetaPost, ein Nachkomme von METAFONT. Diese Seite ordnet, was diese Nicht-TikZ-Systeme sind und wann man sie nimmt, besonders mit Blick auf die Eigenheiten ihrer Ausgabewege. Für neue Arbeit reicht meist TikZ; diese Systeme kennt man für Altbestände, 3D oder bestimmte Ökosysteme.
TikZ zuerst als Standard
Bevor es losgeht, die Empfehlung klar vorweg: Wer heute in LaTeX mit Figuren beginnt, sollte zuerst zu TikZ greifen. TikZ wird aktiv gepflegt, läuft unter pdflatex, lualatex und xelatex ohne zusätzliche externe Werkzeuge, fügt sich natürlich in Schriften und Farben des Dokuments ein und besitzt ein großes Ökosystem von Bibliotheken (tikz-cd, PGFPlots, circuitikz und mehr). TikZ selbst wird auf der Seite „TikZ basics“ behandelt.
Warum also die anderen Systeme kennen? Vor allem aus drei Gründen. Erstens bestehende Dokumente: Ältere Aufsätze, Bücher und Vorlagen können in PSTricks oder Xy-pic geschrieben sein und müssen für Wartung oder Überarbeitung lesbar sein. Zweitens 3D: Für ernsthafte dreidimensionale Figuren ist Asymptote am stärksten. Drittens bestimmte Ökosysteme: In der ConTeXt-Welt ist MetaPost über MetaFun das zentrale Zeichenmittel. Wir gehen sie der Reihe nach durch.
PSTricks: die Kraft von PostScript
PSTricks ist eine Makrosammlung, die PostScripts Zeichenfunktionen direkt aus TeX/LaTeX-Quellen aufruft. Wie der Name sagt, nutzt es intern PostScript und beherrscht Füllungen, Verläufe und Koordinatentransformationen in hoher Qualität. Geladen wird es mit \usepackage{pstricks}, Figuren stehen in der Umgebung pspicture. Die Koordinaten, linke untere und rechte obere Ecke, gibst du beim Öffnen an, etwa \begin{pspicture}(0,0)(4,3).
Die Grundbefehle verraten ihre Funktion meist im Namen. \psline zeichnet eine Linie oder Polylinie, \pscircle einen Kreis und \psframe ein Rechteck. Koordinaten stehen in runden Klammern, etwa \psline(0,0)(3,2), und ein Kreis bekommt Mittelpunkt und Radius wie \pscircle(2,2){1}. Um ein beliebiges Objekt, Text oder ein anderes Bild, an Koordinaten zu setzen, nutzt du \rput, geschrieben \rput(2,1){text}. Für Winkel oder Versatz gibt es zusätzlich \uput. Hier ist ein Minimalbeispiel.
\begin{pspicture}(0,0)(4,3)
\psframe(0,0)(4,3)
\psline{->}(0,0)(3,2)
\pscircle(2,1.5){1}
\rput(2,1.5){$O$}
\end{pspicture}Das zeichnet einen Rechteckrahmen mit Breite 4 und Höhe 3, darin eine Pfeillinie vom Ursprung nach (3,2), darüber einen Kreis mit Radius 1 und Mittelpunkt (2,1.5), sowie das mathematische Symbol O im Kreismittelpunkt. Das {->} in \psline{->} gibt die Pfeilspitze an; in PSTricks werden Linienstil, Pfeilspitzen, Farbe usw. gemeinsam als Optionen in eckigen Klammern [...] gesetzt, zum Beispiel \psline[linewidth=2pt,linecolor=red]{->}(...).
Hier kommt die wichtigste Einschränkung. Weil PSTricks auf PostScript-\specials angewiesen ist, also spezielle Anweisungen im DVI, funktioniert es nicht direkt unter pdflatex, das sofort PDF erzeugt. Der klassische und verlässliche Weg führt über DVI: latex → dvips → ps2pdf. latex erzeugt DVI, dvips wandelt es in PostScript, und ps2pdf aus Ghostscript macht daraus PDF.
latex figure.tex
dvips figure.dvi -o figure.ps
ps2pdf figure.psWenn es unbedingt in einen pdflatex-Ablauf passen muss oder PNG/JPEG-Bilder gemischt werden sollen, gibt es Umwege. Die Pakete pst-pdf und auto-pst-pdf rendern nur die PSTricks-Teile im Hintergrund über PostScript, wandeln sie in PDF-Fragmente und binden diese in die pdflatex-Ausgabe ein. auto-pst-pdf ruft externe Prozesse auf und braucht daher --shell-escape; das verwandte pdftricks benötigt ebenfalls -shell-escape. Ein anderer Weg ist XeLaTeX: Mit installiertem Paket xetex-pstricks kann xelatex PSTricks ohne Quelländerung verarbeiten.
PSTricks besitzt eine reiche Familie von Zusatzpaketen, etwa pst-plot für Funktionsplots, pst-node für Knoten und Verbindungen, pst-3dplot für 3D-Plots und viele mehr; die Ausdruckskraft bleibt hoch. Wegen der Einschränkungen des Ausgabewegs ist TikZ für neue Dokumente aber oft handlicher.
Xy-pic: der Diagramm-Veteran
Xy-pic (Paketname xy) ist ein seit Langem etabliertes Allzweckpaket zum Setzen von Graphen und Diagrammen. Es funktioniert mit plain TeX, LaTeX und AMS-LaTeX und wurde für Diagramme in vielen Bereichen genutzt: Kategorientheorie, Algebra und Topologie, aber auch Automaten, Datenbanken, Chemie und Genealogie. In LaTeX lädt man es üblicherweise mit \usepackage[all]{xy}; [all] aktiviert den Standardsatz an Funktionen.
Der meistgenutzte Teil, besonders für kommutative Diagramme, ist \xymatrix. Dieser Modus setzt ein Diagramm wie eine Matrix: Wie bei tabular werden Einträge mit & getrennt und Zeilen mit \\ umgebrochen. Pfeile zwischen Objekten zeichnet der Befehl \ar; das Ziel wird über Richtungstasten angegeben: [r] rechts, [l] links, [u] oben, [d] unten, und Kombinationen wie [rd] für eine Diagonale (die Zelle einen Schritt rechts und unten). Für Pfeilbeschriftungen verwendet man dieselbe Notation wie für mathematische Skripte: ^ setzt die Beschriftung über (links von) den Pfeil, _ darunter (rechts davon).
\[
\xymatrix{
A \ar[r]^{f} \ar[d]_{\alpha} & B \ar[d]^{\beta} \\
C \ar[r]_{g} & D
}
\]Das erzeugt ein kommutatives Quadrat mit A, B, C und D an den Ecken: f zeigt oben nach rechts, α links nach unten, β rechts nach unten und g unten nach rechts. Die Beschriftung f sitzt über dem oberen Pfeil, g unter dem unteren. Da ein Diagramm selbst ein Stück Mathematik ist, steht es in einer abgesetzten Mathematikumgebung (\[ … \]).
Xy-pic ist historisch wichtig und erscheint noch in vielen Dokumenten, doch für kommutative Diagramme ist die moderne Alternative das TikZ-basierte tikz-cd. tikz-cd handhabt Kurven, ausgefeilte Pfeilspitzen und komplexe mehrzeilige Diagramme leichter und liefert freundlichere Fehlermeldungen. Eine sinnvolle Aufteilung lautet: tikz-cd für neue Arbeit, die Kenntnisse dieses Abschnitts für die Pflege bestehender Xy-pic-Dokumente. Der Vergleich steht ausführlich auf der Seite „Kommutative Diagramme“.
Asymptote: eine Sprache für 2D und 3D
Asymptote ist kein Satz von TeX-Makros, sondern eine eigenständige Vektorgrafiksprache. Mit C++-ähnlicher Syntax beschreibt sie Abbildungen als vollwertige Programmiersprache mit Variablen, Funktionen, Schleifen und Typen. Ihr Ziel ist, Abbildungen dieselbe hochwertige Typografie zu geben, die LaTeX wissenschaftlichem Text bietet; besonders auffällig ist, dass sie 3D- ebenso wie 2D-Grafiken in hoher Qualität zeichnen kann. Da TeX für die Beschriftungen verwendet wird, passen Formeln in der Abbildung zu den Schriften des Fließtexts.
Zur Einbettung in LaTeX lädt man \usepackage{asymptote} in der Präambel und schreibt den Abbildungscode in eine asy environment (\begin{asy} … \end{asy}). Konstruktionsbedingt läuft die Kompilierung in drei Schritten. Zuerst schreibt ein Lauf von latex (oder pdflatex) den Inhalt jeder asy-Umgebung in temporäre .asy-Dateien. Danach erzeugt das externe Programm asy daraus die Abbildungen (PDF für pdflatex, EPS für latex/dvips). Ein letzter Lauf von latex/pdflatex bindet die fertigen Abbildungen ein.
pdflatex document
asy document-*.asy
pdflatex documentDiese drei Schritte von Hand auszuführen ist mühsam; in der Praxis lässt man sie daher meist von latexmk automatisieren. Asymptote-Grafiken können auch als eigenständige .asy-Dateien geschrieben werden, statt in ein Dokument eingebettet zu sein, und mit asy figure.asy separat PDF, EPS oder Ausgaben in Formaten mit interaktivem 3D erzeugen. Hier ist ein minimales .asy-Beispiel.
import three;
size(6cm);
draw(unitcube);
draw(O--X, red, Arrow3);
draw(O--Y, green, Arrow3);
draw(O--Z, blue, Arrow3);Dieser Asymptote-Code importiert das Modul three für 3D-Funktionen, zeichnet einen Einheitswürfel und dann rote, grüne und blaue dreidimensionale Pfeile vom Ursprung entlang der x-, y- und z-Achse. size(6cm) legt die Endgröße fest. Asymptotes Stärke liegt also darin, ernsthafte 3D-Grafiken wie Körper mit Koordinatenachsen oder Flächen, die in TikZ mühsam wären, relativ natürlich zu beschreiben. Außerdem gibt es mit xasy eine GUI-Oberfläche, mit der man interaktiv zeichnen und das Ergebnis als .asy-Quelltext zur manuellen Bearbeitung exportieren kann.
MetaPost: die METAFONT-Linie
MetaPost ist John Hobbys Umarbeitung von Knuths METAFONT (einer Sprache zur Beschreibung von Schriften), mit PostScript als Ausgabe. Es erbt METAFONTs charakteristische Notation, glatte Kurven aus Punkten und Richtungen zu bestimmen (Hobbys Algorithmus), und erlaubt es, Koordinaten deklarativ als Gleichungen anzugeben. Klassisch ist es eine eigenständige Sprache: Eine .mp-Datei wird mit dem Spezialprogramm mpost verarbeitet, um EPS zu erhalten.
In der modernen Praxis ist es am einfachsten, MetaPost inline in LuaLaTeX zu schreiben. Lädt man das Paket luamplib (\usepackage{luamplib}), kann MetaPost-Code direkt in einer mplibcode environment stehen. Die Abbildung wird dabei mit LuaTeXs eingebauter mplib library gesetzt, also ohne separaten mpost-Aufruf und ohne --shell-escape. Das funktioniert im PDF- und im DVI-Modus (bei DVI-Ausgabe wird dvipdfmx vorausgesetzt). Hier ist ein minimales Beispiel.
% lualatex で処理する / compile with lualatex
\documentclass{article}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
draw fullcircle scaled 2cm withpen pencircle scaled 1pt;
draw (-1cm,0)--(1cm,0);
draw (0,-1cm)--(0,1cm);
endfig;
\end{mplibcode}
\end{document}Der Inhalt dieses mplibcode ist MetaPost-Code. beginfig(1) … endfig grenzen eine einzelne Abbildung ab; gezeichnet wird ein Kreis mit Radius 1cm (der Einheitskreis auf 2cm Durchmesser skaliert) mit einem 1pt-Stift, anschließend je ein horizontaler und ein vertikaler Durchmesser. Mit LuaLaTeX kompiliert, wird die Abbildung ohne externes Werkzeug direkt in das PDF eingebunden. fullcircle, pencircle und scaled gehören zum eingebauten Wortschatz von MetaPost.
Ein wichtiger Teil des MetaPost-Ökosystems ist MetaFun, ein leistungsfähiges Format für MetaPost; das Satzsystem ConTeXt integriert MetaPost über MetaFun sehr tief. Für ConTeXt-Nutzer ist MetaPost (über MetaFun) das zentrale Zeichenwerkzeug. Wer dagegen hauptsächlich mit LaTeX arbeitet, nutzt normalerweise TikZ und behält MetaPost im Hinterkopf, wenn METAFONT-artige Kurvenbeschreibungen gebraucht werden oder ConTeXt ins Spiel kommt.
Systeme vergleichen und auswählen
Ordnet man die vier Systeme nach Ausgabeweg, Engine und Stärken, ergibt sich die folgende Tabelle. Der gemeinsame Nenner lautet: Bei neuer Arbeit zuerst TikZ; die hier genannten Systeme wählt man nur, wenn es einen konkreten Grund gibt, etwa ein Altdokument, 3D oder ein bestimmtes Ökosystem.
| System | Ausgabeweg / Engine | Stärke / Haupteinsatz |
|---|---|---|
PSTricks | latex → dvips → ps2pdf; oder pst-pdf/auto-pst-pdf (benötigt --shell-escape), oder XeLaTeX | Hochwertige PostScript-Füllungen und Effekte; viele Altdokumente |
Xy-pic | Funktioniert unter gewöhnlichem LaTeX (kein besonderer Weg) | Kommutative Diagramme (der Veteran); tikz-cd ist die moderne Alternative |
Asymptote | latex/pdflatex → externes asy → erneut latex (mit latexmk automatisieren); oder eigenständiges .asy | Anspruchsvolle 2D- und 3D-Grafiken; Körper und Flächen mit Achsen |
MetaPost | .mp mit mpost verarbeiten; oder LuaLaTeX + luamplib-mplibcode (kein externes Werkzeug) | METAFONT-artige Kurven; zentral für ConTeXt (MetaFun) |
Als praktische Faustregel: Bei der Pflege bestehender Dokumente solltest du das System lesen und schreiben können, das dort bereits verwendet wird, etwa PSTricks oder Xy-pic. Für 3D-Grafiken ist Asymptote der erste Kandidat. Wenn du mit ConTeXt arbeitest, passt MetaPost (MetaFun) natürlich. Für neue kommutative Diagramme wähle tikz-cd statt Xy-pic. Für die große Mehrheit der übrigen Zeichnungen ist TikZ die solideste Wahl, weil es kein zusätzliches externes Werkzeug und keinen besonderen Ausgabeweg verlangt.