Kommutative Diagramme (tikz-cd / amscd)

Ein kommutatives Diagramm ordnet Objekte als Punkte an und stellt die Abbildungen zwischen ihnen als Pfeile dar, sodass man auf einen Blick sieht, dass jeder Weg von Kompositionen dasselbe ergibt. LaTeX bietet dafür zwei Hauptwerkzeuge: das mächtige tikz-cd auf Basis von TikZ und das einfachere AMS-Paket amscd. Diese Seite setzt ein kommutatives Quadrat, das grundlegendste Diagramm dieser Art, mit beiden Werkzeugen, erklärt Richtung, Beschriftung und Linienstil der Pfeile und vergleicht, wann welches Paket passend ist.

Was ein kommutatives Diagramm ist

Kommutative Diagramme werden in Algebra, Kategorientheorie und Topologie verwendet, um Beziehungen auf einen Blick zu zeigen. Das kleinste Beispiel ist das kommutative Quadrat: Objekte A, B, C, D an den vier Ecken, eine Abbildung f oben von A nach B, g unten von C nach D, eine Abbildung links von A nach C und eine rechts von B nach D. Zu sagen, dass das Quadrat kommutiert, heißt nur, dass die zwei Wege von A nach D, oben entlang und dann rechts hinunter gegenüber links hinunter und dann unten entlang, dieselbe Abbildung ergeben.

Ein Diagramm ist selbst ein Stück Mathematik, daher setzt man es normalerweise in eine abgesetzte Mathematikumgebung wie \[\] oder equation. Historisch gab es viele Pakete dafür, etwa xy/xypic, diagrams und andere, doch der heutige De-facto-Standard ist tikz-cd: Es zeichnet Kurven, diagonale Pfeile und komplexe mehrzeilige Diagramme problemlos. Wenn ein schlichtes rechteckiges Diagramm genügt, ist das AMS-Paket amscd die leichte Wahl. Wir betrachten beide nacheinander.

tikz-cd: die moderne Wahl

tikz-cd passt das allgemeine Zeichenpaket TikZ für kommutative Diagramme an. Geschrieben wurde es von Florêncio Neves, inzwischen wird es von Augusto Stoffel betreut; die aktuelle CTAN-Version ist 1.0 vom Mai 2021. Lädt man es in der Präambel mit \usepackage{tikz-cd} oder nach geladenem TikZ mit \usetikzlibrary{cd}, erhält man die Umgebung tikzcd. Ihr Inhalt wird wie bei LaTeXs tabular als Matrix geschrieben: Zellen trennt man mit &, Zeilen mit \\. Jede Zelle ist ein Knoten für ein Objekt, und alles wird automatisch im Mathematikmodus gesetzt.

Pfeile zwischen Objekten zeichnet man mit dem Befehl \arrow; der kurze Alias \ar tut genau dasselbe. In die Zelle, in der der Pfeil beginnt, schreibt man \arrow[…] und gibt Ziel und Gestaltung in den eckigen Klammern an. Das Ziel wird mit Richtungsschlüsseln angegeben: r für rechts, l für links, u für oben, d für unten. Sie lassen sich als Zeichenfolge kombinieren; [rd] zeigt zum Beispiel eine Zelle nach rechts und eine nach unten, also diagonal.

Um einen Pfeil mit einem Label, also dem Namen einer Abbildung, zu versehen, schreibt man in die Optionen eine zitierte Zeichenfolge. \arrow[r, "f"] bedeutet „Pfeil zur rechten Zelle mit Label f“. Standardmäßig steht das Label links vom Pfeil relativ zur Pfeilrichtung; ein Apostroph ' direkt nach dem zitierten Label verschiebt es auf die andere Seite, geschrieben als "g"'. Ein Pfeil kann mehrere Labels tragen, und ihre Position lässt sich etwa mit "f" near start verfeinern. Hier ist ein kurzes Beispiel für die typische Verwendung.

latex
\[
\begin{tikzcd}
  A \arrow[r, "\phi"] \arrow[rd] & B \\
  & C
\end{tikzcd}
\]

Dies erzeugt A links oben, B rechts oben und C rechts unten: Ein horizontaler Pfeil läuft von A nach rechts zu B und trägt das Label φ, während gleichzeitig ein diagonaler Pfeil von A nach C rechts unten führt. Beachte, dass \arrow[r, "\phi"] und \arrow[rd] nacheinander in derselben Zelle A stehen; aus einer Zelle können beliebig viele Pfeile ausgehen.

Damit können wir das eingangs beschriebene kommutative Quadrat setzen. Wir platzieren A, B, C, D als 2×2-Matrix und zeichnen vier Pfeile: f von A nach rechts, die linke Seite von A nach unten, die rechte Seite von B nach unten und g von C nach rechts.

latex
\[
\begin{tikzcd}
  A \arrow[r, "f"] \arrow[d, "\alpha"] & B \arrow[d, "\beta"] \\
  C \arrow[r, "g"]                      & D
\end{tikzcd}
\]

Das ergibt ein Quadrat mit A, B, C, D an den Ecken: f zeigt oben nach rechts, g unten nach rechts, α links nach unten und β rechts nach unten. Jedes Label steht auf seiner Standardseite, links relativ zur Pfeilrichtung. Um etwa das β auf der rechten Seite auf die andere, äußere Seite zu setzen, schreibt man \arrow[d, "\beta"']. Da tikzcd innen Mathematikmodus ist, verwendet man in Label-Optionen \text{…} aus amsmath, wenn gewöhnliche Wörter als Label erscheinen sollen.

Die große Stärke von tikz-cd ist, dass sich das Aussehen von Pfeilen sehr fein ändern lässt. Linienstil, Pfeilspitze und Krümmung schaltet man einfach durch Stil-Schlüssel in den Optionen von \arrow um. Die Tabelle sammelt die gängigen. Mehrere können gleichzeitig angegeben und frei kombiniert werden, etwa \arrow[r, tail, two heads, dashed].

SchlüsselWirkung
hookEin Haken (⊂) am Schwanz, für Inklusion oder Injektion
two headsDoppelte Pfeilspitze für eine Surjektion
tailFügt am Anfang einen Schwanz hinzu, ein weiteres Zeichen für Injektion
dashedMacht die Linie gestrichelt, oft für eine eindeutig bestimmte Abbildung
dottedMacht die Linie gepunktet, ein TikZ-Schlüssel
equalZeichnet eine Doppellinie, also Gleichheit, statt eines Pfeils
bend leftBiegt den Pfeil in einem linken Bogen; bend left=20 setzt den Winkel
bend rightBiegt den Pfeil in einem rechten Bogen

Häufig setzt man auch Isomorphiezeichen wie \sim oder \simeq als Label auf einen Pfeil. \arrow[r, dashed, "\simeq"] setzt zum Beispiel das Zeichen ≃ über einen gestrichelten Pfeil. Um zwei verschiedene Bögen zwischen demselben Objektpaar zu zeichnen, verwendet man bend left und bend right. Da tikz-cd auch TikZ-Schlüssel direkt akzeptiert, etwa color=…, dotted, in=…/out=… und andere, reicht sein Ausdrucksvermögen faktisch über ganz TikZ.

Ein Hinweis: tikzcd-Diagramme werden in DVI-Betrachtern nicht korrekt angezeigt. Kompiliere mit pdflatex, lualatex oder xelatex, die direkt PDF erzeugen, oder über einen DVI-zu-PDF/PS-Weg. Außerdem besitzt \arrow noch eine ältere Form vor der Zitat-Syntax, \arrow[…]{direction}labels, etwa \arrow{r}{f}. Sie ist aus Kompatibilitätsgründen weiterhin verfügbar, aber für neue Arbeiten ist die Zitat-Syntax lesbarer und empfohlen.

amscd: die einfache AMS-CD-Umgebung

amscd portiert die Funktion für kommutative Diagramme aus AMS-TeX nach LaTeX; geladen wird es mit \usepackage{amscd}. Es stellt genau eine CD-Umgebung bereit. Wie bei tikz-cd schreibt man den Inhalt mit & und \\ als Matrix, doch amscd hängt von keinem externen Paket ab, also nicht von TikZ, und arbeitet nur mit TeXs Satzmitteln. Dadurch ist es leichtgewichtig. Sein Entwurf ist allerdings bewusst schlicht: Es kann nur horizontale und vertikale Pfeile zeichnen, siehe unten.

Jeder Pfeil wird als besonderes Token geschrieben, das mit @ beginnt. Horizontale Pfeile sind @>>> nach rechts und @<<< nach links; vertikale Pfeile sind @VVV nach unten, mit V für vertical, und @AAA nach oben, wobei A als nach oben zeigender Pfeil gelesen wird. Gleichheit als Doppellinie ist horizontal @= und vertikal @| oder @\vert. Für einen Gitterpunkt ohne Pfeil setzt man @., einen Punkt. Horizontale Pfeile stehen zwischen Objekten an der &-Position derselben Zeile; vertikale Pfeile stehen in der Zeile direkt unter ihrem Objekt.

Labels werden zwischen die Zeichen geschrieben, aus denen der Pfeil besteht. Das horizontale @>>> hat drei >-Trenner und damit zwei Plätze: Text im ersten Platz direkt nach @> steht über dem Pfeil, Text im zweiten darunter. Also setzt @>f>> f oben, @>>g> g unten und @>f>g> f oben sowie g unten. Vertikal funktioniert @VVV genauso: @VfVV setzt f links neben einen Abwärtspfeil, @VVfV rechts daneben. Für @AAA gilt dieselbe Regel.

Hier ist das Beispiel eines kommutativen Quadrats aus dem AMS-Handbuch zu amscd. Es setzt voraus, dass \End als Operatorname definiert wurde, ähnlich wie mit \operatorname.

latex
\[
\begin{CD}
  S^{{\mathcal{W}}_\Lambda}\otimes T  @>j>>  T \\
  @VVV                                @VV{\End P}V \\
  (S\otimes T)/I                     @=  (Z\otimes T)/J
\end{CD}
\]

In diesem Diagramm läuft in der oberen Zeile ein horizontaler Pfeil vom linken Objekt nach rechts zu T, mit dem Label j darüber. Die mittlere Zeile, @VVV und @VV{\End P}V, erzeugt die vertikalen Pfeile: links einen unbeschrifteten Abwärtspfeil, rechts einen Abwärtspfeil mit dem Label End P auf seiner rechten Seite. Die untere Zeile verbindet ihre beiden Objekte mit @=, einer Doppellinie für Gleichheit. Die Klammern in {\End P} gruppieren ein mehrteiliges Label zu einer Einheit.

Das f/g/α/β-Quadrat vom Anfang der Seite sieht in amscd so aus. Die Labels der linken und rechten vertikalen Pfeile stehen wie oben beschrieben im ersten Platz, also links.

latex
\[
\begin{CD}
  A    @>f>>    B \\
  @VV\alpha V   @VV\beta V \\
  C    @>g>>    D
\end{CD}
\]

Das ergibt ein Quadrat mit A, B, C, D an den Ecken: oben ein Pfeil f nach rechts, unten ein Pfeil g nach rechts, links ein Pfeil α nach unten und rechts ein Pfeil β nach unten. Es ist genau dasselbe Diagramm wie im tikz-cd-Beispiel; nur die @-Schreibweise unterscheidet sich. Da die CD-Umgebung von amscd Mathematikmodus ist, setzt man sie ebenfalls in abgesetzte Mathematik; oben verwenden wir \[\].

Welches Paket verwenden?

Die beiden Pakete haben klar verschiedene Reichweiten. Die CD-Umgebung von amscd behandelt nur gitterartige, rechteckige Diagramme; das AMS-Handbuch sagt selbst ausdrücklich, sie unterstütze nur einfache rechteckige Diagramme ohne diagonale Pfeile oder exotischere Funktionen. Das ist ihre wichtigste Einschränkung. Brauchst du diagonale Pfeile, Kurven oder komplexe mehrzeilige Diagramme, kann amscd sie nicht zeichnen; dann nimmst du tikz-cd oder die xy-Familie.

  • Diagonale Pfeile oder Kurven nötigtikz-cd. amscd kann nur horizontal und vertikal, nicht schräg.
  • Feine Kontrolle über Pfeilspitzen und Linienstile gewünscht, etwa Injektion hook, Surjektion two heads, gestrichelt, Doppellinien → tikz-cd.
  • Ein schlichtes rechteckiges Diagramm genügt / leichte Abhängigkeitenamscd. Es lädt kein TikZ und ist leicht und schnell.
  • Notation als Geschmackssache: Die @>>>-Schreibweise von amscd ist knapp, aber eigenwillig; \arrow[r, "f"] in tikz-cd ist länger, aber für Leser klarer.
  • Ausgabeweg: tikz-cd wird in DVI-Betrachtern nicht korrekt angezeigt und setzt daher eine PDF-erzeugende Engine wie pdfLaTeX voraus; amscd hat diese Einschränkung nicht.

Als Faustregel gilt: Wenn in deinem Artikel nur gelegentlich rechteckige Diagramme vorkommen, reicht amscd völlig aus; es hat keine zusätzliche Abhängigkeit und ist schnell gesetzt. Sind Diagramme zentral und brauchst du schräge Abbildungen, Kurven oder ausgearbeitete Pfeilspitzen, wähle tikz-cd. Und für etwas so Einfaches wie „A → B“ braucht man oft gar keine Diagrammumgebung; ein Inline-Befehl wie \xrightarrow{f} aus amsmath genügt.