Tikz-cd 和 Mayer-Vietoris 序列

Tikz-cd 和 Mayer-Vietoris 序列

在此邮政我找到了一个非常有用的答案,使用 制作 Mayer-Vietoris 同源序列tikz-cd。但是,我需要一些帮助来创建这样的图表: 上同调的 Mayer-Vietoris 序列

我想用同一个包来画它,但我无法正确修改帖子中给出的代码来绘制连接同态的反向箭头。这是我尝试修改的代码,但没有成功。

\documentclass{article}
\usepackage{tikz-cd}

\tikzset{
  curarrow/.style={
  rounded corners=8pt,
  execute at begin to={every node/.style={fill=red}},
    to path={-- ([xshift=50pt]\tikztostart.center)
    |- (#1) node[fill=white] {$\scriptstyle d^*$}
    -| ([xshift=-50pt]\tikztotarget.center)
    -- (\tikztotarget)}
    }
}

\begin{document}

   \begin{tikzcd}[arrow style=math font,cells={nodes={text height=2ex,text depth=0.75ex}}]
       H^{k+1}(M) \arrow[r, "i^{*}"] & H^{k+1}(U) \oplus H^{k+1}(V) \arrow[r] & \cdots \\
       H^{k}(M) \arrow[r, "i^{*}"] & H^{k}(U) \oplus H^{k}(V) \arrow[r, "j^{*}"] \arrow[draw=none]{u}[name=Y, shape=coordinate]{} \arrow[draw=none]{d}[name=Z,shape=coordinate]{} & H^{k}(U \cap V) \arrow[curarrow=Y]{ull}{} \\
       \cdots \arrow[r] & H^{k-1}(U) \oplus H^{k-1}(V) \arrow[r, "j^{*}"] & H^{k-1}(U \cap V) \arrow[curarrow=Z]{ull}{}
   \end{tikzcd}

\end{document}

答案1

我对您发布的代码块进行了工作修改:

\documentclass{article}
\usepackage{tikz-cd}

\tikzset{
  curarrow/.style={
  rounded corners=8pt,
  execute at begin to={every node/.style={fill=red}},
    to path={-- ([xshift=-50pt]\tikztostart.center)
    |- (#1) node[fill=white] {$\scriptstyle d_*$}
    -| ([xshift=50pt]\tikztotarget.center)
    -- (\tikztotarget)}
    }
}

\begin{document}

    \begin{tikzcd}[arrow style=math font,cells={nodes={text height=2ex,text depth=0.75ex}}]
       \cdots & H_{k-1}(U) \oplus H_{k-1}(V) \arrow[l] \arrow[draw=none]{d}[name=Y, shape=coordinate]{} & \arrow[l] H_{k-1}(U \cap V) \\
       H_{k}(M) \arrow[curarrow=Y]{urr}{} & H_{k}(U) \oplus H_{k}(V) \arrow[l] \arrow[draw=none]{d}[name=Z,shape=coordinate]{} & H_{k}(U \cap V) \arrow[l] \\
       H_{k+1}(M) \arrow[curarrow=Z]{urr}{} & H_{k+1}(U) \oplus H_{k+1}(V) \arrow[l] & \cdots \arrow[l]
   \end{tikzcd}

\end{document}

在此处输入图片描述

我所做的更改:

  • 在您发布的代码块中,在中间位置之后H^{k}(U) \oplus H^{k}(V),有两个坐标设置箭头

    \arrow[draw=none]{u}[name=Y, shape=coordinate]{} \arrow[draw=none]{d}[name=Z,shape=coordinate]{}

    这些坐标用于设置边界图标签的位置:Y 坐标设置在中间中间和中间顶部之间(通过向上指向的箭头),Z 坐标设置在中间中间和中间底部之间(通过向下指向的箭头)。我想从中间左侧向右上方发送一个箭头,但在使用它之前必须定义坐标 Y,所以我将定义移动到中间顶部,指向中间中间。

  • 我稍微修改了样式的定义curarrow。在原始版本中,路径从移动到正确的50pt,转身,然后超越左边在结束前减小 50pt;这些反映在xshifts 中。由于箭头的方向是反转的,因此我反转了xshifts 上的符号以反映变化。

  • 显然箭头是反转的。由于原始代码块为上同调生成了 Mayer-Vietoris,并且箭头已反转,因此我还擅自将群切换为同调群。这可能不是您想要的,抱歉。

答案2

您可以使用pstrickspsmatrix环境获得此图。对于连接同态,我在连续行之间的每一端添加中间空节点,并使用复合路径将它们连接起来:

\documentclass{article}
\usepackage{pst-node,  auto-pst-pdf}

\begin{document}

 \[  \def\psrowhookiii{\psset{mrow=r}}
  \begin{psmatrix}[rowsep=1.35]
  \pnode[-0.5,0]{A}\\
  \pnode[1,1]{A2}H^{q+1}_c(M) & H^{q + 1}_c(U) \oplus H^{q + 1}_c(V) & H^{q + 1}_c(U \cap V)\pnode[0,-0.8]{B2}\\
   \pnode[0,1]{A3}  H^q_c(M) & H^q_c(U) \oplus H^q_c(V) & H^q_c(U \cap V)\pnode[-1,-0.8]{B3}\\
       & &   \pnode{B}
       \psset{arrows=->, arrowinset=0.12, nodesep=4pt,  linearc=0.4}
       \ncline{2,3}{2,2} \ncline{2,2}{2,1}\ncbar[angle=180, ]{2,1}{A2}%
       \ncbar[arm=0.7, angle=180, arrows=-, nodesepB=0]{3,1}{A3}\ncline[arrows=-, nodesep=0]{A3}{B2}\nbput[labelsep=1.5pt]{d^*}%
       \ncbar[arm=0.76, angle=0, arrows=->, nodesepA=0]{B2}{2,3}%
       \ncline{3,3}{3,2} \ncline{3,2}{3,1}\ncbar[arm=0.76, angle=0, arrows=->, nodesepA=0]{B3}{3,3}%
    \end{psmatrix} \]

\end{document} 

在此处输入图片描述

相关内容