Kommutative Diagramme (tikz-cd / amscd)

„Dieses Diagramm kommutiert“ ist vielleicht der kürzeste tragende Satz der Mathematik: Er ersetzt ein Bündel von Gleichungen, das ausgeschrieben mehrere Zeilen kostet. Ein kommutatives Diagramm macht aus Objekten Punkte und aus Abbildungen Pfeile und behauptet, dass je zwei gerichtete Wege zwischen demselben Objektpaar zur selben Abbildung komponieren. In LaTeX ist \usepackage{tikz-cd} heute der Standard – die Umgebung heißt tikzcd, ohne Bindestrich –, während das AMS-Paket amscd schlichte rechteckige Gitter nach wie vor bedient. Diese Seite baut ein kommutatives Quadrat von Grund auf, verteilt Beschriftungen auf beide Seiten der Pfeile, biegt sie und endet bei der Frage, welches Paket zu laden ist.

Was „das Diagramm kommutiert“ tatsächlich behauptet

Kommutieren heißt: Jeder gerichtete Weg mit gleichem Anfang und gleichem Ende ergibt dieselbe Komposition. In einem Quadrat mit A, B, C, D an den Ecken – f oben von A nach B, β rechts von B nach D, α links von A nach C und g unten von C nach D – besagt die Kommutativität genau die eine Gleichung β∘f = g∘α. Ein Dreieck trägt eine Gleichung, ein Quadrat eine, ein Würfel sechs, eine pro Seitenfläche, alle in ein einziges Bild gefaltet. Je größer das Diagramm, desto weiter klafft der Abstand zwischen dem, was das Bild fasst, und dem, was die ausgeschriebenen Gleichungen kosten. Ein kommutatives Diagramm ist keine Zierde, sondern verdichtete Notation.

Diese Verdichtung zahlt sich vor allem beim Diagrammjagen (diagram chasing) aus. Beweise der homologischen Algebra – das Fünferlemma, das Schlangenlemma – gehen so vor, dass man in einer Ecke ein Element wählt und es entlang der Pfeile weiterschiebt, also durch das Diagramm wandert. Die Kommutativität ist dabei die Regel, die bei jedem Schritt garantiert, dass beide Wege am selben Ort ankommen. Das Diagramm ist damit nicht nur ein Bild, sondern das Spielbrett, auf dem der Beweis stattfindet. In die mathematische Schreibpraxis kamen solche Diagramme mit der Arbeit von 1945, die die Kategorientheorie begründete; diese Geschichte und die Pfeilzeichen selbst behandelt die Pfeil-Seite.

Ein Diagramm ist selbst abgesetzte Mathematik und gehört daher in \[\] oder eine equation-Umgebung, die ihm eine eigene, zentrierte Zeile gibt. Historisch wurde für diese Aufgabe ein ganzes Regal von Paketen geschrieben – xypic, diagram, kuvio und andere –, doch für neue Arbeiten ist das Feld auf zwei geschrumpft: tikz-cd auf Basis des allgemeinen Zeichenpakets TikZ und das AMS-Paket amscd. Beide werden nacheinander betrachtet.

\usepackage{tikz-cd} und die Umgebung tikzcd

In die Präambel kommt \usepackage{tikz-cd}, im Text wird das Diagramm in \begin{tikzcd}\end{tikzcd} eingeschlossen. Der Paketname trägt einen Bindestrich, der Umgebungsname nicht. Vertauscht man beides, erscheint ! LaTeX Error: File 'tikzcd.sty' not found.; schreibt man die Umgebung ohne das Paket zu laden, erscheint ! LaTeX Error: Environment tikzcd undefined. Ist TikZ bereits geladen, liefert \usetikzlibrary{cd} dasselbe. Die aktuelle CTAN-Fassung ist Version 1.0 vom 4. Mai 2021, betreut von Augusto Stoffel. Die Pfeilspitzen liegen als eigene Bibliothek bei und sind den Pfeilen der Schrift Computer Modern nachgezeichnet – deshalb wirken die Pfeile im Diagramm nicht wie Gäste aus einer fremden Schrift.

Im Inneren von tikzcd schreibt man genau das, was man in tabular oder matrix schreiben würde: Zellen durch & getrennt, Zeilen durch \\. Jede Zelle wird zu einem Knoten des Diagramms, und ihr Inhalt wird automatisch im Mathematikmodus gesetzt, $ ist also überflüssig. Ergänzt man in einer Zelle \arrow, wächst ein Pfeil aus ihr heraus; der kurze Alias \ar ist derselbe Befehl. Der Pfeil steht in der Zelle, in der er beginnt, und sein Ziel wird in den eckigen Klammern mit Richtungsschlüsseln angegeben: r rechts, l links, u oben, d unten. Sie lassen sich zu Zeichenfolgen verbinden – [rd] führt diagonal nach rechts unten, [rr] zwei Zellen weiter. Aus einer Zelle dürfen beliebig viele Pfeile ausgehen.

latex
\usepackage{tikz-cd}   % package has a hyphen; environment does not
\[
\begin{tikzcd}
  A \arrow[r, "f"] \arrow[d, "\alpha"'] & B \arrow[d, "\beta"] \\
  C \arrow[r, "g"']                     & D
\end{tikzcd}
\]

Das ist das kommutative Quadrat. A, B, C, D stehen an den vier Ecken; f läuft oben nach rechts, g unten nach rechts, α und β laufen links und rechts nach unten. & trennt Spalten, \\ trennt Zeilen, das Gerüst ist also nicht mehr als A & B \\ C & D. Die Pfeile sind nachträglich in dieses Gerüst eingefügte Anmerkungen, und die Lage der Objekte hängt in keiner Weise davon ab, wie die Pfeile geschrieben werden – der angenehmste Zug am Entwurf von tikzcd.

Beschriftung über oder unter dem Pfeil: "f" gegenüber "f"'

Eine Zeichenfolge in Anführungszeichen unter den Optionen wird zur Beschriftung, und ein Apostroph ' direkt nach dem schließenden Anführungszeichen schiebt sie auf die andere Seite. Die Regel lautet nicht „oben oder unten“, sondern links bezogen auf die Laufrichtung. Bei einem Pfeil nach rechts liegt links oben – \arrow[r, "f"] setzt f also über den Pfeil, \arrow[r, "f"'] darunter. Bei einem Pfeil nach unten liegt links tatsächlich links – \arrow[d, "\alpha"] setzt α nach links, \arrow[d, "\alpha"'] nach rechts. Vier Fälle muss man sich nicht merken; die eine Regel „links zur Laufrichtung“ erklärt alle.

Ein Pfeil kann beliebig viele Beschriftungen tragen, jede mit eigenen Optionen. "\phi" near start sitzt nahe am Anfang, "\eta" near end nahe am Ziel, und "h" description setzt die Beschriftung auf den Pfeil und stanzt die Linie dahinter in der Hintergrundfarbe aus – der übliche Griff, wenn ein kurzer Pfeil einen langen Namen braucht. Enthalten Beschriftungstext oder Optionen ein Komma, schützen geschweifte Klammern: "{(x,y)}". Da im Inneren Mathematikmodus herrscht, brauchen gewöhnliche Wörter \text{…} aus amsmath.

latex
\[
\begin{tikzcd}
  A \arrow[r, "\phi" near start, "\psi"', "\eta" near end] & B \\
  X \arrow[r, "h" description] \arrow[rd] & Y \\
                                          & Z
\end{tikzcd}
\]

Pfeile biegen und zwei Pfeile zwischen dieselben Objekte legen

Dafür dienen bend left und bend right, bei Bedarf mit Winkel: bend left=25. Der Grund zu biegen ist fast immer derselbe – zwischen demselben Objektpaar liegen zwei Abbildungen. Eine Adjunktion, eine Homotopieäquivalenz, das Abbildungspaar eines Koegalisators: Jedes braucht zwei Pfeile, und gerade gezeichnet liegen sie übereinander und wirken wie einer. Gebogen sind beide lesbar. Sollen sie parallel statt gekrümmt verlaufen, verschieben shift left und shift right (Vorgabe 0.56ex) einen geraden Pfeil seitwärts. Wie stets ist „links“ auf die Laufrichtung bezogen, bend left wölbt sich also nach links aus Sicht des Pfeils.

In dreidimensionalen Diagrammen – ein auf die Seite geplätteter Würfel – kreuzen die hinteren Kanten die vorderen. Ein crossing over am Pfeil zeichnet zunächst eine dicke Linie in der Hintergrundfarbe darunter, sodass er vorn vorbeizulaufen scheint. Pfeile werden in der Reihenfolge ihrer Notation gezeichnet; steht also der Pfeil, der darunter durchsoll, zuerst, verschiebt man die Zeichenreihenfolge, indem man den anderen rückwärts aus einer späteren Zelle angibt, etwa mit from=uu. Ob ein Würfeldiagramm gelingt, hängt genau an diesen beiden Punkten.

latex
\[
\begin{tikzcd}
  A \arrow[r, bend left=25, "f"] \arrow[r, bend right=25, "g"'] & B
\end{tikzcd}
\qquad
\begin{tikzcd}
  A \arrow[dr] & B \arrow[dl, crossing over] \\
  C            & D
\end{tikzcd}
\]

Linienstile und Pfeilspitzen schaltet man ebenso um, durch zusätzliche Schlüssel in den Optionen von \arrow. Die Namen bilden zwei Familien: kurze beschreibende Namen wie hook und two heads sowie Namen, die aus bestehenden LaTeX-Befehlen ohne Rückstrich gebildet sind, etwa dashrightarrow. Wer die zweite Konvention kennt, kann einen Schlüssel raten, statt ihn nachzuschlagen. Schlüssel lassen sich kombinieren: \arrow[r, tail, two heads, dashed] erzeugt einen Pfeil, der zugleich Schwanz, doppelte Spitze und Strichelung trägt. Die gebräuchlichen Schlüssel stehen unten.

SchlüsselWirkung
hookHaken (⊂) am Pfeilende; Inklusionen und Injektionen
hook'Derselbe Haken, zur anderen Seite gebogen
tailEin Schwanz am Anfang; das andere Zeichen für Injektivität
two headsDoppelte Pfeilspitze; Surjektionen
dashedGestrichelte Linie; üblich für eine eindeutig bestimmte Abbildung
dottedGepunktete Linie; ein von TikZ geerbter Schlüssel
squigglyEin geschlängelter Pfeil
equalEine Doppellinie, also Gleichheit, statt eines Pfeils
maps toEin senkrechter Strich am Ende (das ↦ von \mapsto)
RightarrowDoppelt gestrichener Pfeil; 2-Zellen und natürliche Transformationen
dashrightarrowDie Form von \dashrightarrow (Beispiel der Benennung ohne Rückstrich)
bend leftWölbt sich links zur Laufrichtung; bend left=25 setzt den Winkel
bend rightWölbt sich rechts zur Laufrichtung
shift leftVerschiebt einen geraden Pfeil seitwärts (Vorgabe 0.56ex); für parallele Paare
crossing overLegt darunter eine dicke Linie in Hintergrundfarbe, sodass der Pfeil vorn zu verlaufen scheint
phantomMacht den Pfeil unsichtbar; nur die Beschriftungen bleiben, sodass ein Zeichen außerhalb des Gitters sitzen kann
descriptionEine Beschriftungsoption: setzt die Beschriftung auf die Linie und stanzt diese dahinter aus

Ein Isomorphiezeichen als Beschriftung ist eine weitere gängige Wendung: \arrow[r, dashed, "\simeq"] setzt ≃ über einen gestrichelten Pfeil, \sim ebenso. Und da tikz-cd auf TikZ aufsetzt, nimmt es TikZ-eigene Schlüssel unmittelbar an – color=…, dotted, in=…/out=… und weitere. Sein Ausdrucksvermögen reicht faktisch über ganz TikZ, was zugleich heißt: Wenn es klemmt, ist das nötige Handbuch womöglich das von TikZ und nicht das von tikz-cd.

Abstände anpassen und ein Pullback-Quadrat markieren

Die Abstände stehen im optionalen Argument der Umgebung: \begin{tikzcd}[column sep=large, row sep=small]. Zulässig sind sowohl Maße (2em) als auch Namen (tiny, small, large, huge); sep setzt Zeilen und Spalten gemeinsam. Nur die Richtung zu weiten, die die langen Beschriftungen trägt, ist ein so häufiger Wunsch, dass sich diese beiden Schlüssel lohnen.

Für die kleine Ecke ⌜, die ein Pullback-Quadrat (Faserprodukt) kennzeichnet, gibt es keinen eigenen Schlüssel. Üblich ist, eine Beschriftung an einen unsichtbaren Pfeil zu hängen: \arrow[rd, phantom, "\ulcorner", very near start]. Der Schlüssel phantom löscht den Pfeil, und die verbliebene Beschriftung sitzt knapp innerhalb der linken oberen Ecke (beim Pushout entsprechend \lrcorner nahe der rechten unteren). Eine Falle lauert dabei: \ulcorner ist kein Kernzeichen von LaTeX, sondern stammt aus AMSFonts; ohne \usepackage{amssymb} bricht der Lauf mit ! Undefined control sequence. ab. Beschriftungen an einem phantom-Pfeil werden zudem mittig verankert und in voller \textstyle-Größe gesetzt; für kleinere Zeichen ist \scriptstyle ausdrücklich anzugeben.

latex
\usepackage{amssymb}   % \ulcorner comes from AMSFonts, not core LaTeX
\[
\begin{tikzcd}[column sep=large, row sep=large]
  P \arrow[r, "p"] \arrow[d, "q"'] \arrow[rd, phantom, "\ulcorner", very near start]
    & X \arrow[d, "f"] \\
  Y \arrow[r, "g"'] & Z
\end{tikzcd}
\]

Wann amscd noch genügt: die Umgebung CD

Wenn das Diagramm ein rechteckiges Gitter ohne Diagonalen ist und TikZ nicht in den Build gezogen werden soll, ist amscd die Antwort. \usepackage{amscd} liefert genau eines: die Umgebung CD. Sie gehört zum amsmath-Bündel, liegt derzeit als v2.1 vom 14. April 2017 vor und hängt allein von amsgen ab. Reizvoll ist die eigene Dokumentation des Pakets: Sie erklärt, dass es die Diagrammfähigkeit von AMS-TeX 2.x nachbildet, hält ausdrücklich fest, dass nur einfache rechteckige Diagramme unterstützt werden, ohne diagonale Pfeile oder ausgefallenere Funktionen, und fügt hinzu, vielen Nutzenden sei mit einem mächtigeren Diagrammpaket besser gedient – wobei diagram, xypic und kuvio genannt werden. Nicht viele Pakete schicken ihre Leserschaft schon im ersten Absatz woanders hin.

Der Inhalt ist wie bei tikz-cd eine Matrix aus & und \\, doch jeder Pfeil wird als besonderes Token geschrieben, das mit @ beginnt. Waagerecht zeigt @>>> nach rechts und @<<< nach links; senkrecht zeigt @VVV nach unten – das V von „vertical“ – und @AAA nach oben, wobei das A als aufwärts gerichtete Pfeilspitze zu lesen ist. Die Doppellinie für Gleichheit ist waagerecht @= und senkrecht @|. Ein Gitterpunkt ohne Pfeil bekommt den „Nullpfeil“ @., damit die Spalten stimmen. Waagerechte Pfeile stehen zwischen zwei Objekten derselben Zeile, senkrechte in der Zeile unmittelbar unter ihrem Objekt.

Beschriftungen stehen zwischen den Zeichen, aus denen ein Pfeil besteht – und hier ist die Tatsache, die alles Weitere auf einmal erklärt. Laut AMS-Dokumentation wird der Stoff zwischen dem ersten und dem zweiten > als Hochstellung gesetzt, der zwischen dem zweiten und dritten als Tiefstellung. Deshalb setzt @>f>> f nach oben, @>>g> g nach unten und @>f>g> je eines auf beide Seiten. Auch die geringe Größe der Beschriftungen erklärt sich damit: Ein amscd-Pfeil ist im Grunde ein sehr breites Relationszeichen mit Indizes. Senkrechte Pfeile folgen derselben Regel, nur sitzen die Indizes seitlich – @VfVV setzt f links neben einen Abwärtspfeil, @VVfV rechts daneben.

TokenBedeutung
@>>>Pfeil nach rechts
@<<<Pfeil nach links
@VVVPfeil nach unten (V für „vertical“)
@AAAPfeil nach oben (das A als aufwärts weisende Spitze gelesen)
@>f>>Pfeil nach rechts mit f darüber (Hochstellungsplatz)
@>>g>Pfeil nach rechts mit g darunter (Tiefstellungsplatz)
@>f>g>f oben und g unten
@VfVVPfeil nach unten mit f links davon
@VVfVPfeil nach unten mit f rechts davon
@=Waagerechte Doppellinie (Gleichheit)
@|Senkrechte Doppellinie (@\vert ist dasselbe)
@.Nullpfeil: füllt einen Gitterpunkt ohne Pfeil auf
latex
\usepackage{amscd}
\[
\begin{CD}
  A            @>f>>      B \\
  @V\alpha VV              @VV\beta V \\
  C            @>>g>      D
\end{CD}
\]

Das ist genau dasselbe Quadrat wie im tikz-cd-Beispiel. Links setzt @V\alpha VV das α links neben den Pfeil, rechts setzt @VV\beta V das β rechts daneben, sodass beide Beschriftungen nach außen zeigen. Unten setzt @>>g> das g unter seinen Pfeil. Auch die CD-Umgebung ist Mathematikmodus und gehört daher wie tikz-cd in abgesetzte Mathematik. Es folgt das Beispiel aus dem AMS-Handbuch; es setzt voraus, dass \End als Operatorname im Sinne von \operatorname definiert wurde.

latex
% from the AMS amscd manual; \End must be defined as an operator name
\[
\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}
\]

Die obere Zeile führt einen Pfeil vom linken Objekt nach rechts zu T, mit j darüber. Die mittlere Zeile erzeugt die beiden senkrechten Pfeile: links unbeschriftet, rechts mit End P rechts neben dem Pfeil. Die untere Zeile verbindet ihre zwei Objekte mit der Doppellinie @=. Die geschweiften Klammern in {\End P} fassen eine mehrteilige Beschriftung zu einer Einheit zusammen. Und wer innerhalb von amscd fette Pfeile, gestrichelte Pfeile, beidseitige Pfeile oder Farbe braucht, findet sie im Erweiterungspaket amscdx (v2.2x, 2019) – wobei die Beschränkung auf rechteckige Geometrie bestehen bleibt.

tikz-cd oder amscd: die Wahl

Die Entscheidung läuft fast auf eine einzige Frage hinaus – wird ein diagonaler Pfeil gebraucht? Wenn ja, scheidet amscd aus. Genügt ein rechteckiges Gitter, ist amscd leichter in den Abhängigkeiten und kürzer zu schreiben. Die folgende Liste fächert diese eine Frage etwas auf.

  • Diagonale Pfeile oder Kurven erforderlichtikz-cd. amscd beherrscht nur waagerecht und senkrecht; schräg ist nicht bloß mühsam, sondern unmöglich.
  • Feine Kontrolle über Pfeilspitzen und Linienstile (Injektionen hook/tail, Surjektionen two heads, Striche, Doppellinien) → tikz-cd.
  • Ein schlichtes rechteckiges Diagramm genügt und die Abhängigkeiten sollen leicht bleibenamscd. Ohne TikZ läuft der Satz schneller und die Präambel bleibt kurz.
  • Frage des Geschmacks: @>f>> in amscd ist knapp, aber eigenwillig; \arrow[r, "f"] in tikz-cd ist länger, dafür auch ein halbes Jahr später noch lesbar.
  • Ausgabeweg: tikz-cd-Diagramme werden in DVI-Betrachtern nicht korrekt angezeigt. Sie setzen pdflatex, lualatex oder xelatex voraus – Engines, die direkt PDF erzeugen – oder eine Umwandlung von DVI nach PDF/PS. amscd kennt diese Einschränkung nicht.
  • Ob überhaupt ein Diagramm nötig ist: Bei zwei Objekten und einem Pfeil erledigt \xrightarrow{f} aus amsmath im laufenden Text die ganze Arbeit.

Zwei letzte Hinweise für den Fall, dass ein altes Dokument übernommen wird. tikz-cd führt weiterhin die Form aus der Zeit vor der Zitat-Syntax mit – \arrow[Optionen]{Richtung}{Beschriftungen}, etwa \arrow{r}{f} –, aus Gründen der Rückwärtskompatibilität. Dazu kommen die Kurzbefehle \rar, \dar, \uar, \lar sowie diagonale wie \drar; \rar ist schlicht \arrow{r}. Für neue Arbeiten sind beide besser zu meiden: durchgängig \arrow[r, "f"] zu schreiben ist ein Gefallen an das eigene spätere Ich.