尝试在此绘制 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]
部分指定了最近绘制的线与之相交的线的起点和终点:线的起点是d
own, d
own, l
eft from current cell,终点是r
ight, r
ight, d
own from current cell。
最后,\hole
使用 xymatrix 扩展命令|
(break) 让 xy pic 将 a 放置在该位置。