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.
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}
Die meisten Diagramme lassen sich mit Hilfe des matrix-Moduls erzeugen. Die Matrix- bzw. Tabellenstruktur wird dabei innerhalb von \xymatrix{ ... }
definiert.
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.
A | B |
C | D |
A | B | |
C |
A | B | ||
X | Y | ||
C | D | ||
Z | W |
A | B | |
C | D | |
E |
Tabellenstruktur für einige gängige Diagramme
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.
\begin{xy}
\xymatrix{
A \ar[r]^f \ar[d]_i & B \ar[d]^j \\
C \ar[r]_g & D
}
\end{xy}
\begin{xy}
\xymatrix{
A \ar[rr]^f \ar[rd]_g & & B \ar[dl]^h \\
& C &
}
\end{xy}
\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.
\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.
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.
Das Aussehen der Pfeile kann mittels @{ende schaft spitze}
bestimmt werden. Folgende Zeichen werden dabei erkannt:
-
(normaler Strich), .
(gepunktet), ~
(gewellt), =
(doppelter Strich), :
(doppelt gepunktet), --
(gestrichelt)>
, <
, (
, )
, |
, /
, >>
, <<
, ||
, //
, >|
, |-
, +
, x
, o
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.
\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 \\
}
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/
.
\xymatrix{
A \ar[r]^f & B \ar[r]^g & C \ar@/^/[ll]^h \\
}
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.
\xymatrix{
A \ar@<2pt>[r]^f & B \ar@<2pt>[l]^g \\
}
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.
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.
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.
\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 \\
}
27. Januar 2005