Commutative diagram with rounded arrows

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}

enter image description here

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}

enter image description here


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}

enter image description here


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...

commutative diagram