8

trying to draw a 3D commutative diagram here and getting really stuck trying to get the hole in one of the arrows in the right place, you should see which one I mean as there is only one crossover.

Here is my code:

\xymatrix{
        &               &       &       &T(U_1 \cap U_2) \ar[ddr]^{(\sigma_2)_*} \ar[ddl]_{(\sigma_1)_*}    &       \\ 
        &U_1 \cap U_2 \ar[ddr]^{\sigma_2} |!{[dd];[rr]}\hole \ar[ddl]_{\sigma_1} \ar@{-->}[urrr]^D &        &       &                   &       \\
        &               &       &T(\CC \setminus \{ 0\}) \ar[rr]^{\textit{bundle transition}} & & T(\CC \setminus \{ 0\}) \\
\CC \setminus \{ 0\} \ar[rr]_{\textit{coordinate transition}} \ar@{-->}[urrr]^D & & \CC \setminus \{ 0\} \ar@{-->}[urrr]^D &            &   & \\}

enter image description here

Does anyone have any suggestions?

Also, if anyone can suggest any other ways to make this diagram look `more 3D' I would be very grateful.

Thanks, Adam.

egreg
  • 1,121,712

3 Answers3

5

I'd give a try to tikz-cd:

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{tikz-cd}

\begin{document}
\[
\begin{tikzcd}[row sep=3em,column sep=1em]
&&&& T(U_1\cap U_2) \arrow[ddl,swap,"(\sigma_1)_*"] \arrow[ddr,"(\sigma_2)_*"] \\
& U_1\cap U_2 \arrow[ddl,swap,"\sigma_1"] \arrow[urrr,dashed,"D"] \\
&&& T(\mathbb{C}\setminus\{0\}) \arrow[rr,"\scriptscriptstyle\textit{bundle transition}"] &&
    T(\mathbb{C}\setminus\{0\}) \\
\mathbb{C}\setminus\{0\} \arrow[urrr,dashed,"D"] 
                         \arrow[rr,swap,"\scriptscriptstyle\textit{coordinate transition}"] &&
\mathbb{C}\setminus\{0\} \arrow[urrr,dashed,"D"]
  \arrow[uul,leftarrow,crossing over,"\sigma_2"]
\end{tikzcd}
\]
\end{document}

The trick is to draw the crossing over arrow later than the arrow it has to be crossed over (reversing the direction with leftarrow).

enter image description here

If you want the left triangle to be in the background, just change the arrow that must cross over:

\documentclass{article}
\usepackage{amsmath,amssymb}

\usepackage{tikz-cd}

\begin{document}
\[
\begin{tikzcd}[row sep=3em,column sep=1em]
&&&& T(U_1\cap U_2) \arrow[ddl,swap,"(\sigma_1)_*"] \arrow[ddr,"(\sigma_2)_*"] \\
& U_1\cap U_2 \arrow[ddl,swap,"\sigma_1"] \arrow[ddr,"\sigma_2"]
              \arrow[urrr,dashed,"D"] \\
&&& T(\mathbb{C}\setminus\{0\}) \arrow[rr,"\scriptscriptstyle\textit{bundle transition}"] &&
    T(\mathbb{C}\setminus\{0\}) \\
\mathbb{C}\setminus\{0\} \arrow[urrr,dashed,crossing over,"D"] 
                         \arrow[rr,swap,"\scriptscriptstyle\textit{coordinate transition}"] &&
\mathbb{C}\setminus\{0\} \arrow[urrr,dashed,"D"]
\end{tikzcd}
\]
\end{document}

enter image description here

An alternative form where it may be easier to guess the 3D aspect, with the bigger triangle in front.

\documentclass{article}
\usepackage{amsmath,amssymb}

\usepackage{tikz-cd}

\begin{document}
\[
\begin{tikzcd}[row sep=3em,column sep=1em]
& U_1\cap U_2 \arrow[ddl,swap,"\sigma_1"] \arrow[ddr,"\sigma_2"]
              \arrow[drrr,dashed,"D"] \\
&&&& T(U_1\cap U_2) \arrow[ddr,"(\sigma_2)_*"] \\
\mathbb{C}\setminus\{0\} \arrow[drrr,dashed,"D"] 
                         \arrow[rr,"\scriptscriptstyle\textit{coordinate transition}"] &&
\mathbb{C}\setminus\{0\} \arrow[drrr,dashed,"D"] \\
&&& T(\mathbb{C}\setminus\{0\}) 
    \arrow[rr,swap,"\scriptscriptstyle\textit{bundle transition}"]
    \arrow[uur,leftarrow,crossing over,"(\sigma_1)_*"]  &&
    T(\mathbb{C}\setminus\{0\})
\end{tikzcd}
\]
\end{document}

enter image description here

egreg
  • 1,121,712
5

I, too, would opt for tikz-cd.

Anyway, this is a solution with xy-pic. Note that it works only with the latex -> dvips -> ps2pdf route.

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage[dvips,all]{xy}
\usepackage{xcolor}

\newcommand{\CC}{\mathbb{C}}

\begin{document}
\[
\xymatrix{
        &               &       &       &T(U_1 \cap U_2) \ar[ddr]^{(\sigma_2)_*} \ar[ddl]_{(\sigma_1)_*}    &       \\
        &U_1 \cap U_2 \ar[ddl]_{\sigma_1} \ar@{-->}[urrr]^D &        &       &                   &       \\
        &               &       &T(\CC \setminus \{ 0\}) \ar[rr]^{\textit{bundle transition}} & & T(\CC \setminus \{ 0\}) \\
\CC \setminus \{ 0\} \ar[rr]_{\textit{coordinate transition}} \ar@{-->}[urrr]^D & & 
\CC \setminus \{ 0\} \ar@*{[|(15)][white]}[uul]\ar@{<-}[uul]_{\sigma_2}\ar@{-->}[urrr]^D &   &   & \\}
\]

\[
\xymatrix{
        &               &       &       &T(U_1 \cap U_2) \ar[ddr]^{(\sigma_2)_*} \ar[ddl]_{(\sigma_1)_*}    &       \\
        &U_1 \cap U_2 \ar[ddr]^{\sigma_2} \ar[ddl]_{\sigma_1} \ar@{-->}[urrr]^D &        &       &                   &       \\
        &               &       &T(\CC \setminus \{ 0\}) \ar[rr]^{\textit{bundle transition}} & & T(\CC \setminus \{ 0\}) \\
\CC \setminus \{ 0\} \ar[rr]_{\textit{coordinate transition}} \ar@*{[|(15)][white]}[urrr]\ar@{-->}[urrr]^D & & 
\CC \setminus \{ 0\} \ar@{-->}[urrr]^D &   &   & \\}
\]

\end{document} 

enter image description here

The main idea is to draw a thicker white arrow over the underlying arrow, for example

\ar@*{[|(15)][white]}[urrr]

and then the visible arrow over that

\ar@{-->}[urrr]^D
karlkoeller
  • 124,410
1

The "break" command in your code (|!{[dd];[rr]}\hole) should instead be |!{[ddl];[rrd]}\hole, since you were hoping to "slide" along with last drawn line to the position where it intersects with another line(! command).

The [ddl];[rrd] part specifies the the start and end of the line that recently-drawn line intersects with: The start of the line is down, down, left from current cell, the end is right, right, down from current cell.

And finally, ask xy pic to place a \hole at the position with xymatrix extension command |(break).