如何在 xypic 中定位箭头上的孔

如何在 xypic 中定位箭头上的孔

尝试在此绘制 3D 交换图,并在尝试将其中一个箭头中的孔放在正确的位置时遇到困难,您应该看到我的意思,因为只有一个交叉点。

这是我的代码:

\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 &            &   & \\}

在此处输入图片描述

有没有人有什么建议?

此外,如果有人能建议其他方法让该图看起来更“三维”,我将不胜感激。

谢谢,亚当。

答案1

我会尝试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}

诀窍是将交叉箭头画得比需要跨越的箭头晚一些(用 反转方向leftarrow)。

在此处输入图片描述

如果希望左三角形位于背景中,只需更改必须穿过的箭头:

\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}

在此处输入图片描述

另一种形式可能更容易猜测 3D 方面,因为前面有更大的三角形。

\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}

在此处输入图片描述

答案2

我,也会选择tikz-cd

无论如何,这是一个解决方案xy-pic。请注意,它仅适用于 latex -> dvips -> ps2pdf 路线。

\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} 

在此处输入图片描述

主要思想是在底层箭头上绘制更粗的白色箭头,例如

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

然后是可见的箭头

\ar@{-->}[urrr]^D

答案3

代码中的“break”命令(|!{[dd];[rr]}\hole)应该是|!{[ddl];[rrd]}\hole,因为您希望沿着最后绘制的线“滑动”到与另一条线相交的位置(!命令)。

[ddl];[rrd]部分指定了最近绘制的线与之相交的线的起点和终点:线的起点是down, down, left from current cell,终点是right, right, down from current cell。

最后,\hole使用 xymatrix 扩展命令|(break) 让 xy pic 将 a 放置在该位置。

相关内容