将多个箭头装入不同层级

将多个箭头装入不同层级

所以我画了这个图

在此处输入图片描述

 \begin{tikzcd}
 & & & 0 &  \\

0\arrow[r] & \ker{d^i}\arrow[d]\arrow[r] &
 A^i\arrow[d]\arrow[r] & \Ima{d^{i-1}}\arrow[r]\arrow[u] & 0\\

0 \arrow[r] &  H^i(A^*)\arrow[r] & A^i/ \Ima{d^{i-1}}\arrow[ur] & & 
\end{tikzcd}

我想将弯曲的短正合序列装箱,以便得到类似这样的结果(我用 Paint 制作的)

在此处输入图片描述

有没有不太复杂的方法可以做到这一点?我不介意解决方案是否意味着使用 tikzpicture 或其他东西代替 tikzcd。

答案1

当然可以使用以下方法这个答案,即通过记住节点并放置覆盖。

\documentclass{article}
\usepackage{tikz-cd}
\usepackage{amsmath}
\DeclareMathOperator*{\im}{Im}
\begin{document}
\[
\begin{tikzcd}[remember picture] % see https://tex.stackexchange.com/a/256562/121799
 & & & 0 &  \\
0\arrow[r] & \ker{d^i}\arrow[d]\arrow[r] &
 A^i\arrow[d]\arrow[r] & \im a{d^{i-1}}\arrow[r]\arrow[u] & 0\\
0 \arrow[r] &  H^i(A^*)\arrow[r] & A^i/ \im a{d^{i-1}}\arrow[ur] & & 
\end{tikzcd}
\]
\tikz[remember picture,overlay]{
\draw[-] (tikz@[email protected] west|-tikz@[email protected] east)
--(tikz@[email protected] west|-tikz@[email protected])
--(tikz@[email protected]) --(tikz@[email protected])
--(tikz@[email protected]|-tikz@[email protected] west)
--(tikz@[email protected] east|-tikz@[email protected] east)
--(tikz@[email protected] east)
--(tikz@[email protected] east)--cycle;
}
\end{document}

在此处输入图片描述

如您所见,轮廓往往会干扰箭头。可以通过在这里和那里添加一些小的偏移来解决这个问题。但我想说的是,突出轮廓的更好方法是将其阴影化。

\documentclass{article}
\usepackage{tikz-cd}
\usepackage{amsmath}
\DeclareMathOperator{\Ima}{Im}
\begin{document}
\[
\begin{tikzcd}[remember picture] % see https://tex.stackexchange.com/a/256562/121799
 & & & 0 &  \\
0\arrow[r] & \ker{d^i}\arrow[d]\arrow[r] &
 A^i\arrow[d]\arrow[r] & \Ima a{d^{i-1}}\arrow[r]\arrow[u] & 0\\
0 \arrow[r] &  H^i(A^*)\arrow[r] & A^i/ \Ima a{d^{i-1}}\arrow[ur] & & 
\end{tikzcd}
\]
\tikz[remember picture,overlay]{
\fill[blue,opacity=0.2] (\tikzcdmatrixname-3-1.south west|-\tikzcdmatrixname-3-3.south east)
--(\tikzcdmatrixname-3-1.north west|-\tikzcdmatrixname-3-3.north)
--(\tikzcdmatrixname-3-3.north) --(\tikzcdmatrixname-2-4.west)
--(\tikzcdmatrixname-2-4.west|-\tikzcdmatrixname-1-4.north west)
--(\tikzcdmatrixname-2-4.south east|-\tikzcdmatrixname-1-4.north east)
--(\tikzcdmatrixname-2-4.south east)
--(\tikzcdmatrixname-3-3.south east)--cycle;
}

\[
\begin{tikzcd}[remember picture] % see https://tex.stackexchange.com/a/256562/121799
 & & & 0 &  \\
0\arrow[r] & \ker{d^i}\arrow[d]\arrow[r] &
 A^i\arrow[d]\arrow[r] & \Ima a{d^{i-1}}\arrow[r]\arrow[u] & 0\\
0 \arrow[r] &  H^i(A^*)\arrow[r] & A^i/ \Ima a{d^{i-1}}\arrow[ur] & & 
\end{tikzcd}
\]
\tikz[remember picture,overlay]{
\fill[red,opacity=0.2] (\tikzcdmatrixname-3-1.south west|-\tikzcdmatrixname-3-3.south east)
--(\tikzcdmatrixname-3-1.north west|-\tikzcdmatrixname-3-3.north)
--(\tikzcdmatrixname-3-3.north) --(\tikzcdmatrixname-2-4.west)
--(\tikzcdmatrixname-2-4.west|-\tikzcdmatrixname-1-4.north west)
--(\tikzcdmatrixname-2-4.south east|-\tikzcdmatrixname-1-4.north east)
--(\tikzcdmatrixname-2-4.south east)
--(\tikzcdmatrixname-3-3.south east)--cycle;
}
\end{document}

在此处输入图片描述

在这种情况下,您不必为这些转变而烦恼。

笔记:在第一个代码片段中,第一个数字 ,1tikz@f@1-3-3比如)指的是图表。如果你有多个交换图(如第二个代码片段所示),则需要注意这一点。我没有找到关于这一点的文档,但在tikzlibrarycd.code.tex其中一个文档中找到了

\def\tikzcd@ar@target{\tikzcdmatrixname-\tikzcd@currentrow-\tikzcd@currentcolumn} 

这似乎起了作用。

相关内容