In meinen Diagrammen sind die Pfeile manchmal etwas schief. Wie in diesem kleinen Beispiel, aufgrund der unterschiedlichen Höhe der Objekte:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newcommand*{\mal}{\mathbin{\raisebox{0.4ex}{\scriptsize$\otimes$}}}
\begin{document}
\begin{tikzpicture}[node distance=3em]
  \node (A) {$A^2$};
  \node [base right = of A] (AxA) {$A\mal A$};
  \draw [->] (A) edge node [above] {$\scriptstyle\varphi$} (AxA);
  \draw[black!20] (A.base)  ++(-0.5,0) -- ++(3.2,0);% Hilfslinie
\end{tikzpicture}
\end{document}

Ausgabe mit schiefem Pfeil

Nun kann man sich behelfen, indem man manuell die gleiche node-Höhe einstellt bzw. bei vertikalen Pfeilen die gleiche node-Breite. Das ist Gebastel, gerade bei großen Diagrammmen mit unterschiedlichen Inhalten, und kann schnell bei inhaltlicher Änderung wieder unpassend werden.

Kann ich für die Pfeile bestimmen, dass sie nur waagerecht bzw. senkrecht verlaufen dürfen?

gefragt 06 Jul '13, 11:01

Felix's gravatar image

Felix
1.3k525666
Akzeptiert-Rate: 47%

bearbeitet 13 Aug '13, 20:57

cgnieder's gravatar image

cgnieder
22.1k253463

@Felix: Vielleicht kannst du dein Beispiel noch mit einem "problematischen" senkrechten Pfeil erweitern? Nach dem fragst du zwar auch, aber da im Beispiel nur ein waagerechter vorkommt, konzentrieren sich die Antworten auf diesen.

(19 Aug '13, 16:09) esdd
1

@esdd Ich glaube, die Frage Vertikale Verbindung zwischen zwei ungleich großen Elementen hilft hier. Das Problem ist im Prinzip das gleiche.

(19 Aug '13, 20:42) Qrrbrbirlbel

In TikZ gibt es eine Syntax für vertikal-horizontale und horizontal-vertikale Linien: |- und -|, die man statt -- verwenden kann. Hier verwende ich sie einmal, um den Ausgangspunkt zu bestimmen als Schnitt vertikaler und horizontaler Linie:

\draw (A.east |- AxA) edge [->] node [above] {$\scriptstyle\varphi$} (AxA);

Diese Zeile ersetzt im Eingangsbeispiel ergibt einen waagerechten Pfeil:

Ausgabe mit waagerechtem Pfeil

Oder, am Anker des anderen node orientiert und dann mit -|:

\draw (A) edge [->] node [above] {$\scriptstyle\varphi$} (A -| AxA.west);
Permanenter link

beantwortet 06 Jul '13, 13:17

stefan's gravatar image

stefan ♦♦
18.3k163148
Akzeptiert-Rate: 50%

Wozu brauchst du dafür tikZ?

\documentclass{article}
\usepackage{amsmath}
\newcommand*{\mal}{\mathbin{\raisebox{0.4ex}{\scriptsize$\otimes$}}}
\begin{document}

$A^2\xrightarrow{\makebox[1cm]{$\scriptstyle\varphi$}}A\mal A$

\end{document}

ansonsten:

\node [base right = of A] (AxA) {$A\mal A\vphantom{A^2}$};

beide Ausdrücke gleich hoch gestalten.

Permanenter link

beantwortet 06 Jul '13, 12:15

Herbert's gravatar image

Herbert
5.1k34
Akzeptiert-Rate: 31%

bearbeitet 06 Jul '13, 12:22

TikZ verwende ich, weil es wie gesagt auch um größere Diagramme geht. Das Minimalbeispiel habe ich selbstverständlich sehr reduziert. Eigentlich ist es modifizierter Teil eines kommutativen Diagramms zur Koassoziativität der Komultiplikation einer Koalgebra. Da habe ich mich überzeugen lasse, dass TikZ sich eignet.

(06 Jul '13, 12:38) Felix

Für kommutative Diagramme würde ich eines der speziellen Pakete nehmen: http://ctan.org/topic/diagram-comm

(06 Jul '13, 12:45) Herbert

@Herbert Ich teste die anderen Pakete mal. Im Augenblick scheint mir das umfangreiche TikZ eine gute Wahl, weil es nicht nur auf kommutative Diagramme spezialisiert ist, und ich es neben Algebra auch für algebraische Topologie verwenden könnte.

(06 Jul '13, 13:00) Felix

Der Pfeil verbindet (in gerader Verlängerung) die center-Anchors der Nodes. Allerdings haben deine Nodes unterschiedliche Höhen (verursacht durch die hochgestellte Zahl), dadurch liegen die center-Anchors nicht auf der gleichen vertikalen Höhe. Das könntest du natürlich ändern, in dem du die Nodes eben mit ihrem Standard-Anchorcenter positioniert, dies wird aber, wie du vermutlich festgestellt hast, dazu führen, dass die Basislinien nicht mehr auf der gleichen Höhe sind.

Herbert gibt bereits eine Option, nämlich \vphantom{A^2}, das in dem rechten Node eine vertikale unsichtbare Linie einfügt, die die Box so stark vergrößert, damit sie (mindestens) genauso hoch und tief wie die andere Box ist. Ähnliches kann erreicht werden, in dem du die TikZ-Nodes-Optionen text depth und text height verwendest. Eine sehr verallgemeinernde Möglichkeit gäbe es mit font=\strut als Option zu den Knoten (zum Beispiel im every node-Style), um in allen Nodes eine relativ hohe und tiefe Box sicherzustellen.

Falls du aber oft kommutative Diagramme (→ Womit kann ich kommunikative Diagramme zeichnen) zeichnest und TikZ verwenden willst, bietet sich das tikz-cd-Paket an, das auch extra ein Shape mitliefert, das du auch so in TikZ verwenden kannst. Es leiht sich die grobe Syntax bei der xymatrix ab und verwendet intern die TikZ-\matrix, die sich so oder so dafür anbietet).

Dein Beispiel sähe damit so aus:

\documentclass[tikz,convert=false]{standalone}
\usepackage{tikz-cd}
\newcommand*{\mal}{\mathbin{\raisebox{0.4ex}{\scriptsize$\otimes$}}}

\begin{document}
\begin{tikzcd}
A^2 \rar{\varphi} & A\mal A
\end{tikzcd}
\end{document}

Ergebnisabbildung

Das \rar ist schon ein Short-Cut für \arrow{r}, wobei r hier die Zelle rechts von der aktuellen bedeuten. Ein \arrow{rrd} würde ein Pfeil zur Zelle zeichnen, die zwei Spalten weiter rechts und eine Zeile weiter unten (down) liegt. Ein weiteres Argument in geschweiften Klammern wird als node für den Pfeil verstanden (und automatisch in \scriptsize/\scriptstyle gesetzt). Es wird sowohl für den Pfeil als auch den „edge node“ ein optionales Argument in eckigen Klammern akzeptiert, das als Option an die edge bzw. den Knoten weitergereicht wird:

\arrow[bend left]{luu}[text=red,swap]{\varphi}

zeichnet einen Pfeil zur Zelle zwei Zeilen weiter oben und eine Spalte weiter links, der links-gebogen ist und von einem roten φ begleitet wird, das allerdings auf der anderen Seite als üblich ist (schaue dir die auto-Option im TikZ-Handbuch an).


Das extra Shape von tikz-cd verwendet übrigens einen center-Anchor, der ähnlich wie der mid-Anchor einen fest definieren Abstand (nämlich /tikz/commutative diagrams/center yshift) über der Basislinie liegt:

alt text

Permanenter link

beantwortet 25 Jul '13, 11:32

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k3815
Akzeptiert-Rate: 53%

bearbeitet 19 Aug '13, 05:22

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730
×69
×54
×35

gestellte Frage: 06 Jul '13, 11:01

Frage wurde gesehen: 18,026 Mal

zuletzt geändert: 19 Aug '13, 20:42