tikz-cd 中的节点位置

tikz-cd 中的节点位置

我想使用 tikz-cd 获得下面附加的交换图。源代码已在 TeX 中制作,底部行的节点(即 coker ker f 和 ker coker f)的定位已通过宏获得\hidewidth。但是我如何在 tikzcd 中获得类似的结果\hidewidth

tikz-cd 中的代码(没有我想要获得的对齐)如下:

\begin{center}
\begin{tikzcd}
    \ker f \arrow[r,"\varepsilon"] & A \arrow[r,"f"] \arrow[d] & B\arrow[r,"\pi"] & \coker f \\
    & \coker\ker f\arrow[r,dotted,"\bar f"] & \ker\coker f\arrow[u]
\end{tikzcd}
\end{center}

谢谢你! 在此处输入图片描述

答案1

基于\mathllap和 的mathrlap变体mathtools;以及一个简单的\makebox

\documentclass{report}
\usepackage{mathtools,amssymb}
\usepackage{tikz-cd}
\usepackage{calc} 
\DeclareMathOperator{\Ker}{Ker}
\DeclareMathOperator{\Coker}{Coker}

\begin{document}

\[
\begin{tikzcd}
\Ker f \arrow[r] & A \arrow[r]\arrow[d] & B \arrow[r] & \Coker f \\
& \mathllap{\Coker \Ker{}} f \arrow[r] & \makebox[\widthof{$B$}][l]{$\mathrlap{\Ker\Coker f}$}\arrow[u]
\end{tikzcd}
\]

\end{document}

在此处输入图片描述

答案2

也许不是一个完美的解决方案,但它是一个起点。

在此处输入图片描述

\documentclass{report}
\usepackage{amsthm,amsmath,amssymb,amsfonts}
\usepackage{tikz-cd}

\begin{document}
\[
\begin{tikzcd}
\operatorname{Ker} f \arrow[r] & A \arrow[r]\arrow[d] & B \arrow[r] & \operatorname{Coker} f \\
& \llap{$\operatorname{Coker} \operatorname{Ker}{}$}f \arrow[r] & \mathrm{K} \rlap{$\operatorname{er}\operatorname{Coker} f $}\arrow[u]
\end{tikzcd}
\]
\end{document}

答案3

说实话我更喜欢上面的那个。无论如何,这种情况可以通过简单地为长对象分配一个固定宽度(这里是 1em)来解决,使它们分别贴在左侧和右侧。

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

\DeclareMathOperator{\coker}{coker}

\begin{document}

\[% not center
\begin{tikzcd}
\ker f \arrow[r,"\varepsilon"] &
A \arrow[r,"f"] \arrow[d] &
B\arrow[r,"\pi"] & \coker f
\\
&
\coker\ker f \arrow[r,dashed,"\bar f"] &
\ker\coker f \arrow[u]
\end{tikzcd}
\]

\[% not center
\begin{tikzcd}
\ker f \arrow[r,"\varepsilon"] &
A \arrow[r,"f"] \arrow[d] &
B\arrow[r,"\pi"] & \coker f
\\
&
\makebox[1em][r]{$\coker\ker f$} \arrow[r,dashed,"\bar f"] &
\makebox[1em][l]{$\ker\coker f$} \arrow[u]
\end{tikzcd}
\]

\end{document}

在此处输入图片描述

为什么不呢center?因为\[...\]显示不会被其上方的文本分隔开(之前没有空行\[)。

如果您更喜欢大写字母“Ker”和“Coker”,请使用\DeclareMathOperator如图所示的方式定义\Ker\Coker

答案4

一个纯粹的tikz-cd解决方案,无需使用\makebox\mathllap\llap类似手段进行破解。

您可以使用以下选项:

/tikz/column 2/.append style={nodes={anchor=base east}}

右对齐第二列的节点并:

/tikz/column 3/.append style={nodes={anchor=base west}}

将第二列的节点左对齐。

然后您可以使用选项to path来指示您需要的路径,例如to path={-- (\tikztostart |- \tikztotarget.north)}]表示“前往具有起点的 x 坐标和终点的 y 坐标的点,即北锚点。

对于从左下角节点到 B 的箭头,我曾经<-反转箭头的方向以便从 B 开始并能够使用to path

我还习惯于&[-5em]减少第一列与第二列之间以及第三列与最后一列之间的间距。

\documentclass{report}
\usepackage{amsthm,amsmath,amssymb,amsfonts}
\usepackage{tikz-cd}

\begin{document}
\[
\begin{tikzcd}[%
    /tikz/column 2/.append style={nodes={anchor=base east}},
    /tikz/column 3/.append style={nodes={anchor=base west}}
    ]
\operatorname{Ker} f \arrow[r] &[-5em] A \arrow[r]\arrow[d, start anchor=south,to path={-- (\tikztostart |- \tikztotarget.north)}] & B \arrow[r]\arrow[d, <-,to path={-- (\tikztostart |- \tikztotarget.north)}] &[-5em] \operatorname{Coker} f \\
& \operatorname{Coker} \operatorname{Ker} f \arrow[r] & \operatorname{Ker} \operatorname{Coker} f 
\end{tikzcd}
\]
\end{document}

在此处输入图片描述

相关内容