Kommutative Diagramme mit Xy-pic

Es gibt verschiedene Pakete, um in TeX bzw. LaTex kommutative Diagramme zu erzeugen, unter anderem das Paket CD der AMS, kuvio, borceux und nicht zuletzt XY-pic. XY-pic ist eigentlich ein Paket, um zweidimensionale Grafiken zu erzeugen, besitzt aber auch Module, mit deren Hilfe relativ schnell auch kompliziertere kommutative Diagramme erzeugt werden können. Die 16-seitige Anleitung Xy-pic User's Guide (DVI, PS, HTML) und die 80 Seiten starke Referenz Xy-pic Reference Manual (DVI, PS) beschreiben das Paket erschöpfend, wenn auch in etwas knapper Form. Die Vermutung liegt nahe, daß folgende Anleitung nur alter Wein in neuen Schläuchen ist - Ziel dieser Anleitung ist es jedoch, den Wein trinkfertig in einem Dekanter zu servieren: anhand der Erklärung der für kommutative Diagramme relevanten Eigenschaften und einigen Beispielen sollen Sie nach 10-15 Minuten in der Lage sein, selbst Ihre benötigten Diagramme zu erstellen.

Laden des Pakets in LaTeX

In LaTeX wird das Paket mittels \usepackage eingebunden. Als Optionen gibt man die benötigten Module an. Für kommutative Diagramme sind das matrix und arrow, sowie curve für gekrümmte Pfeile. Die Grafiken bzw. Diagramme stehen innerhalb einer Xy-Umgebung \begin{xy} ...\end{xy}, und diese muß innerhalb einer Math-Umgebung $$ .. $$ bzw. \[ .. \] stehen.

\documentclass{article}
\usepackage[arrow, matrix, curve]{xy}
...
\begin{document}
...
  \[
    \begin{xy}
...
    \end{xy}
  \]
...
\end{document}

Allgemeine Funktionsweise

Die meisten Diagramme lassen sich mit Hilfe des matrix-Moduls erzeugen. Die Matrix- bzw. Tabellenstruktur wird dabei innerhalb von \xymatrix{ ... } definiert.

Objekte

Im Allgemeinen ordnet man nur die Objekte in einem Rechteckschema an, für die Pfeile werden keine eigenen Tabellenzellen reserviert. Tabellenzellen werden wie üblich mittels & getrennt, die Tabellenzeilen werden durch \\ getrennt. Innerhalb von \xymatrix{...} dürfen keine leere Zeilen stehen.

Quadrat
AB
CD
Dreieck
AB
C
Würfel
AB
XY
CD
ZW
Pushout
AB
CD
E

Tabellenstruktur für einige gängige Diagramme

Pfeile

Die Pfeile des Diagramms werden mit Hilfe von \ar erzeugt. Pfeile schreibt man in die entsprechenden Zellen der Quellobjekte und notiert, zu welcher Zelle der Pfeil zeigen soll: \ar[r] zeichnet z.B. einen Pfeil zu dem Objekt in der benachbarten rechten Zelle, \ar[d] zu der benachbarten unteren Zelle, bei \ar[ddl] geht der Pfeil zwei Zellen nach unten und eine nach links, usw. Die relativen Richungen sind:

Anstelle der relativen Position kann auch die absolute Position der Ziel-Zelle mittels \ar(·,·) notiert werden - \ar(2,4) läßt den Pfeil zu der Zelle in der zweiten Zeile und vierten Spalte zeigen.

Die Beschriftungen der Pfeile werden an \ar[·] mit folgenden Zeichen angehängt:

So erzeugt \ar[r]^i einen nach rechts zeigenden Pfeil mit darüberstehendem i, während beim nach links weisenden Pfeil \ar[l]^i das i unterhalb des Pfeils steht. Zusammengesetzte Beschriftungen werden, wie in TeX üblich, mit {...} gruppiert, zudem kann ein Pfeil gleichzeitig mehrere Beschriftungen haben. Beispielsweise erzeugt \ar[r]^i_{j + k} einen sowohl oberhalb, als auch unterhalb beschrifteten Pfeil.

Einige einfache Beispiele

Das klassische Quadrat

Quadrat

\begin{xy}
  \xymatrix{
      A \ar[r]^f \ar[d]_i    &   B \ar[d]^j  \\
      C \ar[r]_g             &   D   
  }
\end{xy}

Ein Dreieck

Dreieck

\begin{xy}
  \xymatrix{
      A \ar[rr]^f \ar[rd]_g  &     &  B \ar[dl]^h  \\
                             &  C  &
  }
\end{xy}

Der bekannte Würfel

Würfel

\begin{xy}
  \xymatrix{
   &  A \ar[rr]^f \ar[dd]_i  &  &  B \ar[dd]^j  \\
   X \ar[rr]^p \ar[dd]_k \ar[ru]  &  &  Y \ar[dd]^l \ar[ru]  &  \\ 
   &  C \ar[rr]_g  &  &  D  \\
   Z \ar[rr]_q \ar[ru]  &  &  W \ar[ru]  &
  }
\end{xy}

Der Würfel hat noch einige Schönheitsfehler, wie z. B. sich schneidende Linien, oder durch Linien überdeckte Beschriftungen. Weiter unten wird beschrieben, wie man dies beheben kann.

Push-Out Diagramm

Push-Out

\begin{xy}
  \xymatrix{
      A \ar[r]^f \ar[d]_g  &  B \ar[d]^i \ar[ddr]^k  &  \\
      C \ar[r]_j \ar[drr]_l  &  D \ar[dr]  &  \\
      &  &  E
  }
\end{xy}

Gelegentlich sind in ähnlichen Diagrammen die beiden äußeren Diagonalpfeile leicht gekrümmt. Wie man dies erreicht und noch weitere Tips folgt im anschließenden Teil des Artikels.

Weitere Möglichkeiten

Das Aussehen der Pfeile kann mit verschiedenen, mit dem Zeichen @ beginnenden Sequenzen noch verändert werden \ar@...@...[...]. Pfeile können gekrümmt und verschoben werden, außerdem kann das Aussehen von Pfeilspitze, -schaft und -ende verändert werden.

Pfeilspitze, -schaft und -ende

Das Aussehen der Pfeile kann mittels @{ende schaft spitze} bestimmt werden. Folgende Zeichen werden dabei erkannt:

Zwischen den Zeichen für ende schaft spitze dürfen keine Leerzeichen stehen. @2{...} bzw. @3{...} zeichnet den Schaft doppelt bzw. dreifach, @^{...} bzw. @_{...} zeichnet Spitze und Ende nicht mittig, sondern verschiebt sie nach links bzw. rechts bezüglich der Pfeilrichtung.

Pfeile

\xymatrix{
  A  \ar@{.}[r]^f    &  B  \ar2@{<->}[r]^g  &  C  \\
  A  \ar@{o-x}[r]^f  &  B  \ar@_{(-|}[r]^g  &  C  \\
  A  \ar@{->>}[r]^f  &  B  \ar@^{(->}[r]^g  &  C  \\
}

Gekrümmte Pfeile

Mit @/^/ bzw. @/_/ werden Pfeile nach links bzw. nach rechts gekrümmt (in Pfeilrichtung betrachtet). Optional kann man noch angeben, wie stark der Pfeil gekrümmt wird, z. B. @/^ 1cm/.

gekrümmter Pfeil

\xymatrix{
  A  \ar[r]^f  &  B  \ar[r]^g  &  C  \ar@/^/[ll]^h  \\
}

Pfeile senkrecht zur Pfeilrichtung verschieben

Will man mehrere Pfeile übereinander zeichnen, so kann man sie um wert durch @<wert> senkrecht zur Pfeilrichtung verschieben. wert muß dabei eine Größe mit Einheit sein, z. B. 0.1cm, .5ex.

verschobene Pfeile

\xymatrix{
  A  \ar@<2pt>[r]^f  &  B  \ar@<2pt>[l]^g  \\
}

Beschriftung in Pfeilrichtung verschieben

Die Beschriftung kann man in Pfeilrichtung dadurch verschieben, daß man direkt vor den Beschriftungstext /wert/ einfügt: \ar[l]^/.3em/f .

Tip: Wenn sich zwei Pfeile kreuzen, so kann einer von ihnen mittels einer leeren Beschriftung auf dem Pfeil unterbrochen werden. Gut eignet sich hierfür \phantom{*}, das einen dem Zeichen * entsprechenden leeren Zwischenraum erzeugt. Wenn sich die Pfeile nicht in der Mitte kreuzen, so kann man diese leere Beschriftung entsprechend verschieben. Das Paket Xy-pic bietet hierfür auch die Möglichkeit, Kreuzungspunkte automatisch berechnen zu lassen. Eine genaue Beschreibung hierzu findet man in dem oben genannten Handbuch, die Behandlung hier würde den Rahmen sprengen.

Feste Zellenhöhe und -breite erzwingen

Normalerweise werden Zellenhöhen und -breiten an den jeweiligen Zelleninhalt angepaßt. Sollen alle Zellen die gleiche Höhe (= Höhe des höchsten Zelleninhalts) haben, so beginnt man die Matrix mit \xymatrix@!R, bei \xymatrix@!C sind alle Zellen gleich breit und \xymatrix@! schaltet sowohl feste Höhe, als auch Breite ein.

Objekte ausrichten

Die Objekte werden in den Zellen zentriert, so daß die Pfeile immer zur Objektmitte weisen. Stellt man jedoch einem Objekt **[l] etc. voran, so wird das Objekt links von den Pfeilen gesezt usw.

Objekte an Pfeilen ausgerichtet

\xymatrix@!C{
  **[r] A_1 \otimes \cdots \otimes A_n  \ar[r] \ar[d]
                &  B \ar[d]  \\
  C \ar[r]  &  **[l] D_1 \oplus \cdots \oplus D_n  \\
}

Unveröffentlicht

Entstehungsdatum

27. Januar 2005

Neue Seiten