1

I want to draw the following diagram in LaTeX. This is essentially a diagram of the snake lemma, but a bit different from the usual one.

enter image description here

By rotating the diagram of the snake lemma ninety degrees and inverting it, this diagram can be obtained. But, to write this directly may be more comfortable.

Thank you for your help.

The following is the code for the usual snake lemma.

\begin{document}

\documentclass{article}
\thispagestyle{empty}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{tikz-cd}
\usetikzlibrary{%
  matrix,%
  calc,%
  arrows%
}

\begin{tikzpicture}[>=triangle 60]

\matrix[matrix of math nodes,column sep={60pt,between origins},row
sep={60pt,between origins},nodes={asymmetrical rectangle}] (s)
{
&|[name=ka]| \ker f &|[name=kb]| \ker g &|[name=kc]| \ker h \\
%
&|[name=A]| A' &|[name=B]| B' &|[name=C]| C' &|[name=01]| 0 \\
%
|[name=02]| 0 &|[name=A']| A &|[name=B']| B &|[name=C']| C \\
%
&|[name=ca]| \coker f &|[name=cb]| \coker g &|[name=cc]| \coker h \\
};
\draw[->] (ka) edge (A)
          (kb) edge (B)
          (kc) edge (C)
          (A) edge (B)
          (B) edge node[auto] {\(p\)} (C)
          (C) edge (01)
          (A) edge node[auto] {\(f\)} (A')
          (B) edge node[auto] {\(g\)} (B')
          (C) edge node[auto] {\(h\)} (C')
          (02) edge (A')
          (A') edge node[auto] {\(i\)} (B')
          (B') edge (C')
          (A') edge (ca)
          (B') edge (cb)
          (C') edge (cc)
;
\draw[->,gray] (ka) edge (kb)
               (kb) edge (kc)
               (ca) edge (cb)
               (cb) edge (cc)
;
\draw[->,gray,rounded corners] (kc) -| node[auto,text=black,pos=.7]
{\(\partial\)} ($(01.east)+(.5,0)$) |- ($(B)!.35!(B')$) -|
($(02.west)+(-.5,0)$) |- (ca);
\end{tikzpicture}

The output is
snake lemma

The code for this usual snake lemma diagram can be also seen in How do you draw the "snake" arrow for the connecting homomorphism in the snake lemma?

5
  • 1
    Using tikz-cd you also have direct access to the cells so writing the arrow grom G to Coker is easy.
    – daleif
    Commented Dec 6, 2023 at 8:52
  • Welcome to TeX.SX! You posted a question just a few minutes ago, if I am not mistaken, which I maybe closed too early. Sorry for this! I probably did not get your question exactly and suppressed further elaboration by closing the question. This was not my intention. In the earlier question, however, you showed some code you already have. It would be great if you could post this here again, because it is much easier to help you with some code already existing. Commented Dec 6, 2023 at 9:26
  • 1
    Can you please make your code compilable? The class and necessary package are missing. Commented Dec 6, 2023 at 10:00
  • @samcarter_is_at_topanswers.xyz I modified the code. This code can be also seen in. tex.stackexchange.com/questions/3892/… Commented Dec 6, 2023 at 11:32
  • 1
    Have you tried to adapt it at all? I don't really understand how the one diagram is supposed to be a rotated version of the other.
    – cfr
    Commented Dec 6, 2023 at 19:43

2 Answers 2

2

You can bend the arrow:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{cd,bbox}

\DeclareMathOperator{\Coker}{Coker}

\begin{document}

Some text before the diagram, we make it long enough to split across
lines so we see better what happens.
\[
\begin{tikzcd}[
  column sep={5em,between origins},
  row sep=5ex,
  bezier bounding box, % <-- https://tex.stackexchange.com/a/619994/
]
0 \arrow[r] &
A \arrow[r] \arrow[d] &
B \arrow[r,"i"] \arrow[d] &
C \arrow[r] \arrow[d] &
\Coker i \arrow[r] \arrow[d,"g"] &
0
\\
0 \arrow[r] &
D \arrow[r] \arrow[d] &
E \arrow[r,"i"] \arrow[d] &
F \arrow[r] \arrow[d] &
J
\\
&
G \arrow[r] \arrow[rrruu,in=150,out=170,looseness=2.6,"\delta"] &
H \arrow[r] &
I
\end{tikzcd}
\]
Some text after the diagram, we make it long enough to split across
lines so we see better what happens.

\end{document}

enter image description here

2

With tikz-cd you can control the arrow using to path in the arrow options. Here is the original together with your version for comparison.

enter image description here

\documentclass{article}

\usepackage{tikz-cd, amsmath}

\DeclareMathOperator{\coker}{coker}
\tikzcdset{arrow style=tikz, diagrams={>={Triangle[]}}}
\colorlet{mygray}{gray!80}

\begin{document}

\[
\begin{tikzcd}[sep={60pt,between origins}, arrows=thick, every label/.append style={font=\normalsize}]
 & \ker f\arrow[d]\arrow[r, mygray] & \ker g\arrow[d]\arrow[r, mygray] & \ker h\arrow[d] & \\ % Final `&` needed for proper spacing in subsequent rows
 & A'\arrow[d, "f"]\arrow[r] & B'\arrow[d, "g", ""{coordinate, name=Z, pos=.2}]\arrow[r, "p"] & C'\arrow[d, "h"]\arrow[r] & 0\\
0\arrow[r] & A\arrow[d]\arrow[r, "i"] & B\arrow[d]\arrow[r] & C\arrow[d]\\
 & \coker f\arrow[r, mygray] & \coker g\arrow[r, mygray] & \coker h
\arrow[mygray, from=1-4, to=4-2, rounded corners, 
    to path={-- ([xshift=60pt]\tikztostart.east) |- (Z) [pos=.25, text=black]\tikztonodes 
    -| ([xshift=-60pt]\tikztotarget.west) -- (\tikztotarget)}, "\partial"]
\end{tikzcd}
\]

\[
\begin{tikzcd}[sep={60pt,between origins}, arrows=thick, every label/.append style={font=\normalsize}]
0\arrow[r] & A\arrow[r]\arrow[d] & B\arrow[r, "i"]\arrow[d] & C\arrow[r]\arrow[d] & \coker i\arrow[d]\arrow[r] & 0\\
0\arrow[r] & D\arrow[r]\arrow[d] & E\arrow[r]\arrow[d] & F\arrow[r]\arrow[d] & J\\
 & G\arrow[r] & H\arrow[r] & I
\arrow[mygray, from=3-2, to=1-5, rounded corners,
    to path={-- ([xshift=-70pt]\tikztostart.west) --++(0,140pt) [pos=1, text=black]\tikztonodes 
    -| (\tikztotarget.north) }, "\partial"]
\end{tikzcd}
\]

\end{document}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .