# Commutative diagram with rounded arrows

I want to draw a diagram which has some arrows between to points A and B. First arrow goes straight from A to B and above it should be a $\Psi$. Second arrow goes in a round way from A to B and above should be a $\Phi$. Furthermore there's another one from A to B which has a $\Omega$.

Now there should be some $\Downarrow$s from $\Phi$ to $\Psi$ and from $\Psi$ (starting below the arrow) to $\Omega$.

The drawing below shows an idea of what I want.

I usually use xypic for such kind of diagrams. Thatswhy I tried this first. But I came to no real solution. Ist this possible with xypic and, if yes, how? If not, I assume most would suggest TikZ. How can I set this with TikZ?

-

In Xy-pic:

\documentclass{article}
\usepackage[all,2cell]{xy}
\UseAllTwocells

\begin{document}
\xymatrixcolsep{3cm}
\xymatrix{
A \ruppertwocell^f{\alpha}
\rlowertwocell_h{\beta}
\ar[r]|{g}
&B\\
}

\end{document}


In TikZ:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,arrows}

\begin{document}

\begin{tikzpicture}
\node (a) {$A$};
\node[right=4cm of a] (b) {$B$};
\draw[->]
(a) edge node[fill=white] (g) {$g$} (b)
(a) edge[bend left] node (f) [above]{$f$} (b)
(a) edge[bend right] node (h) [below]{$h$} (b);
\draw[shorten <=2pt,shorten >=2pt,-implies]
(f) edge[double] (g)
(g) edge[double] (h);
\end{tikzpicture}

\end{document}


-

Another solution with pgf/tikZ.

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{automata,positioning}

\begin{document}
\begin{tikzpicture}[%
>=stealth,
shorten >=2pt,
shorten <=2pt,
auto,
node distance=5cm
]
\node (a) {A};
\node (b) [right of=a] {B};

\path[->] (a) edge                node        (psi)   {$\Psi$}   (b)
(a) edge [bend left=45] node        (phi)   {$\Phi$}   (b)
(a) edge [bend right]   node [swap] (omega) {$\Omega$} (b)
(phi) edge (psi)
(psi) edge (omega);
\end{tikzpicture}
\end{document}


-

Here's a first stab at a tikz solution. It is crude and I'm sure there are libraries that would tidy this up no end! The standalone document class and the scale are just to get the picture looking big enough...

\documentclass[border=5em]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\begin{document}
\begin{tikzpicture}[scale=3]
\node (a)  {$A$};
\node  (b) [right=of a] {$B$};
\node (midpoint) at ($(a)!.5!(b)$) {};
\node (psi) [above=.5cm of midpoint] {$\psi$};
\draw[->] (a) -- (b);
\draw[->] (a.north east) parabola bend (psi.south) (b.north west);
\draw[->,shorten <=3pt] (psi.south) -- (midpoint.north);
\end{tikzpicture}
\end{document}


I'm using the positioning library to be able to use constructions like \node (b) [right=of a] {$B}; which allows me to position a node (b) relative to the position of (a). I'm using the calc library to allow to easily work out the midpoint of the line from a to b with the $(a)!.5!(b)\$ construction. Other numbers put in the middle there will identify points nearer to a or b... This answer contains some good examples of using the calc library.

I draw a parabola that starts at a and then bends south of the psi node, which is above the midpoint before coming to an end at b.

Then I draw another line that starts just south of psi (and then some: I shorten the begining of the path because otherwise it actually overlaps with where the previous line bended...). The line continues to just north of midpoint.

It should be obvious how to make the other half: make a node below the midpoint and then do roughly the same thing...

-