所以我画了这个图
\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}
在这种情况下,您不必为这些转变而烦恼。
笔记:在第一个代码片段中,第一个数字 ,1
(tikz@f@1-3-3
比如)指的是图表。如果你有多个交换图(如第二个代码片段所示),则需要注意这一点。我没有找到关于这一点的文档,但在tikzlibrarycd.code.tex
其中一个文档中找到了
\def\tikzcd@ar@target{\tikzcdmatrixname-\tikzcd@currentrow-\tikzcd@currentcolumn}
这似乎起了作用。