我正在尝试绘制 Serre 纤维化的同伦序列。我一直在寻找如何绘制“蛇形图”的方法,但编写以下代码对我不起作用:
\begin{tikzcd}[cramped, sep=small]
\cdots \rar
&\pi_{n+1}(B,b_{0}) \arrow[r]
& \pi_{n}(F,x_{0}) \arrow[r]
& \pi_{n}(X,x_{0}) \arrow[r]
& \pi_{n}(B,b_{0}) \arrow[r]
& \pi_{n-1}(F,x_{0}) \arrow[r]
& \cdots
\arrow[dl, phantom, ""{coordinate, name=Z}]
\arrow[dll,
rounded corners,
to path={ -- ([xshift=2ex]\tikztostart.east)
|- (Z) [near end]\tikztonodes
-| ([xshift=-2ex]\tikztotarget.west)
-- (\tikztotarget)}] \\
\cdots \arrow[r]
&\pi_{1}(B,b_{0}) \arrow[r]
&\pi_{0}(F,x_{0}) \arrow[r]
&\pi_{0}(X,x_{0}) \arrow[r]
&\pi_{0}(B,b_{0}) \arrow[r]
& 0
\end{tikzcd}
答案1
正如第 1.2 节所述,TikZ-CD 手册:
箭头目标可以通过方向参数指定,该方向参数由一串字符
r
、l
、d
、u
(代表右、左、下、上)组成。
因此,您需要使用,dllllll
因为您的目标单元格是一行d自己的和六列升开始。
我添加了一个snakey
键,可以自行查找辅助坐标(使用calc
库,我们可以使用($(\tikztostart)!#1!(\tikztotarget)$)
)。
它们\tikztonodes
沿着线段进行设置,以便节点的工作方式就像它们被放置在该段上一样(这样,就没有near end
必要了)。
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{cd}
\tikzcdset{
snakey/.default=.5,
snakey/.style={
rounded corners,
start anchor=east,
end anchor=west,
to path={
[insert path/.expanded={(\tikztostart)edge[line to, path only]
coordinate[pos={#1}](@aux)(\tikztotarget)}]
-|([xshift=2ex] \tikztostart |-@aux)
--([xshift=-2ex]\tikztotarget|-@aux)\tikztonodes
|-(\tikztotarget)}}}
\begin{document}
\begin{tikzcd}[cramped, sep=small]
\cdots \arrow[r]
& \pi_{n+1}(B,b_{0}) \arrow[r]
& \pi_{n}(F,x_{0}) \arrow[r]
& \pi_{n}(X,x_{0}) \arrow[r]
& \pi_{n}(B,b_{0}) \arrow[r]
& \pi_{n-1}(F,x_{0}) \arrow[r]
& \cdots \arrow[dllllll, snakey] \\
\cdots \arrow[r]
&\pi_{1}(B,b_{0}) \arrow[r]
&\pi_{0}(F,x_{0}) \arrow[r]
&\pi_{0}(X,x_{0}) \arrow[r]
&\pi_{0}(B,b_{0}) \arrow[r]
& 0
\end{tikzcd}
\end{document}