tikz-cd 中的“交叉”功能对向下箭头不起作用

tikz-cd 中的“交叉”功能对向下箭头不起作用

这是我的代码:

\begin{equation*}
       \begin{tikzcd}
            0 \arrow[rr] & & A\arrow{dd} \arrow[rd]\arrow[rr]&& B\arrow[rd]\arrow[rr]\arrow{dd} && C\arrow[rr]\arrow[rd] && 0\\
            & 0 \arrow[crossing over]{rr} && A'\arrow[crossing over]{dd} \arrow[crossing over]{rr} && B'\arrow[crossing over]{dd}\arrow[crossing over]{rr} && C'\arrow[crossing over]{dd} \arrow[rr] && 0\\
            0 \arrow{rr} & & I^0\arrow{rr}&& I^0 \oplus J^0\arrow{rr} && J^0\arrow{rr} && 0 \\
            & 0 \arrow[crossing over]{rr} && I^{0'} \arrow[crossing over]{rr} && I^{0'}\oplus J^{0'}\arrow[crossing over]{rr} && J^{0'} \arrow[rr] && 0
        \end{tikzcd}
\begin{equation*}

不幸的是,我的图表看起来像这样: 在此处输入图片描述 我们可以看到,从第二行到第四行的向下箭头不遵循交叉命令。有什么想法吗?

编辑:

这是我的完整代码:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{amsthm}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{xfrac}
\usepackage{tikz-cd}



\begin{document}
    \begin{equation}
        \begin{tikzcd}
        0 \arrow[rr] & & A\arrow{dd} \arrow[rd]\arrow[rr]&& B\arrow[rd]\arrow[rr]\arrow{dd} && C\arrow[rr]\arrow[rd] && 0\\
        & 0 \arrow[crossing over]{rr} && A'\arrow[crossing over]{dd} \arrow[crossing over]{rr} && B'\arrow[crossing over]{dd}\arrow[crossing over]{rr} && C'\arrow[crossing over]{dd} \arrow[rr] && 0\\
        0 \arrow{rr} & & I^0\arrow{rr}&& I^0 \oplus J^0\arrow{rr} && J^0\arrow{rr} && 0 \\
        & 0 \arrow[crossing over]{rr} && I^{0'} \arrow[crossing over]{rr} && I^{0'}\oplus J^{0'}\arrow[crossing over]{rr} && J^{0'} \arrow[rr] && 0
        \end{tikzcd}
    \end{equation}
    
\end{document}

答案1

当“下箭头”已经绘制完成后,您需要延迟绘制交叉箭头。

最简单的方法是用 在目标单元格中​​定义它们from=

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{amsthm}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{xfrac}
\usepackage{tikz-cd}



\begin{document}

\begin{equation}
\begin{tikzcd}[column sep={between origins,3.5em}]
  0 \arrow[rr] &&
  A \arrow[dd] \arrow[rd] \arrow[rr] &&
  B \arrow[rd] \arrow[rr] \arrow[dd] &&
  C \arrow[rr]\arrow[rd] &&
  0
\\
% down arrows here are delayed
  &
  0 \arrow[crossing over,rr] &&
  A' \arrow[crossing over,rr] &&
  B' \arrow[crossing over,rr] &&
  C' \arrow[rr] &&
  0
\\
  0 \arrow[rr] &&
  I^0\arrow[rr] &&
  I^0 \oplus J^0 \arrow[rr] &&
  J^0\arrow{rr} &&
  0
\\
  &
  0 \arrow[crossing over,rr] &&
  I^{0'} \arrow[crossing over,rr] \arrow[from=uu,crossing over] &&
  I^{0'}\oplus J^{0'} \arrow[crossing over,rr] \arrow[from=uu,crossing over] &&
  J^{0'} \arrow[rr] \arrow[from=uu,crossing over] &&
  0
\end{tikzcd}
\end{equation}
    
\end{document}

在此处输入图片描述

我还对您的代码做了一些调整,统一了语法。我不喜欢过长的行,这样我就可以控制一行的整个代码。更重要的是,between origins避免对角箭头的不同斜率;缺点是必须猜测列分隔,但无论如何,在排版时都必须查看此类图表,并且不存在行或列间距的“通用配方”。

一支箭CJ0可能缺失(也在您的示例代码中)。

答案2

像这样 ?

  • 我用的是箭头的绝对位置
  • 我给它们涂上颜色蓝色的以便您可以更轻松地看到更改。
  • 我有评论代码是无用构建此图表而不删除它,以便您可以更轻松地看到更改。

一些解释:

  • 使用 tikz-cd,the crossing over style makes a thicker line, with color background color, to be drawn under the current arrow, simulating the effect of its passing over other arrows参见手册第 2.6 节(三维图)
  • 由于您的交叉箭头是先建造的,另一个箭头是其次建造的,因此它没有效果。具有交叉效果的箭头必须始终最后建造。当无法以通常的方式执行此操作时,您始终可以使用绝对位置最后构建它们。

截屏

\documentclass[border=5mm]{standalone}
%\usepackage[utf8]{inputenc}%<-- useless always loaded 
%\usepackage[english]{babel}
%\usepackage{amsthm}
%\usepackage{amsfonts}
%\usepackage{amsmath}
%\usepackage{xfrac}
\usepackage{tikz-cd}

\begin{document}
%    \begin{equation}
        \begin{tikzcd}
        0 \arrow[rr] & & A\arrow{dd} \arrow[rd]\arrow[rr]&& B\arrow[rd]\arrow[rr]\arrow{dd} && C\arrow[rr]\arrow[rd] && 0\\
        & 0 \arrow[crossing over]{rr} && A'%\arrow[crossing over]{dd} 
        \arrow[crossing over]{rr} && B'%\arrow[crossing over]{dd}
        \arrow[crossing over]{rr} && C'%\arrow[crossing over]{dd} 
        \arrow[rr] && 0\\
        0 \arrow{rr} & & I^0\arrow{rr}&& I^0 \oplus J^0\arrow{rr} && J^0\arrow{rr} && 0 \\
        & 0 \arrow[crossing over]{rr} && I^{0'} \arrow[crossing over]{rr} && I^{0'}\oplus J^{0'}\arrow[crossing over]{rr} && J^{0'} \arrow[rr] && 0
        %-- absolute placement of arrows --%
        \arrow[blue,from=2-4,to=4-4,crossing over]
        \arrow[blue,from=2-6,to=4-6,crossing over]
        \arrow[blue,from=2-8,to=4-8,crossing over]
        \end{tikzcd}
%    \end{equation}
    
\end{document}

答案3

我确认命令crossing over正确运行。从代码比较中可以看出,我已正确定位交叉点。检查您的代码是否有两个\begin{equation*}

在此处输入图片描述

\documentclass[a4paper,12pt]{article}
\usepackage{amsmath}
\usepackage{tikz-cd}
   
\begin{document}
       \begin{tikzcd}
            0 \arrow[rr] & & A\arrow{dd} \arrow[rd]\arrow[rr]&& B\arrow[rd]\arrow[rr]\arrow{dd} && C\arrow[rr]\arrow[rd] && 0\\
            & 0 \arrow[crossing over]{rr} && A'\arrow{dd} \arrow[crossing over]{rr} && B'\arrow{dd}\arrow{rr} && C'\arrow{dd} \arrow[rr] && 0\\
            0 \arrow{rr} & & I^0\arrow[crossing over]{rr}&& I^0 \oplus J^0\arrow[crossing over]{rr} && J^0\arrow[crossing over]{rr} && 0 \\
            & 0 \arrow{rr} && I^{0'} \arrow{rr} && I^{0'}\oplus J^{0'}\arrow{rr} && J^{0'} \arrow[rr] && 0
        \end{tikzcd}
\end{document}

答案4

在稍后绘制(并从而指定)交叉箭头时,对于简单的情况,指定应在背景中绘制箭头(这也意味着在单元格/标签后面)可能会很有用。

因此,可以使用\aror来代替or 。\arrow\bgar\bgarrow

我没有添加快捷方式变体\bgrar等。

代码

\documentclass{article}
\usepackage[english]{babel}
\usepackage{tikz-cd}
\usetikzlibrary{backgrounds}
\makeatletter
\let\tikzcd@ar@new@orig\tikzcd@ar@new
\def\tikzcd@ar@new@bg[#1]{%
  \pgfutil@g@addto@macro\tikzcd@savedpaths{%
    \pgfonlayer{background}\path[/tikz/commutative diagrams/.cd,every arrow,#1]%
    (\tikzcd@ar@start\tikzcd@startanchor)to(\tikzcd@ar@target\tikzcd@endanchor);
    \endpgfonlayer}\let\tikzcd@ar@new\tikzcd@ar@new@orig}
\tikzcdset{every diagram/.append code=%
  \def\bgarrow{\let\tikzcd@ar@new\tikzcd@ar@new@bg\tikzcd@arrow}%
  \let\bgar\bgarrow}
\makeatother
\begin{document}
\begin{equation}
\begin{tikzcd}[column sep={3.5em,between origins}]
  0 \arrow[rr]
    && A\arrow[dd] \arrow[rd]\arrow[rr]
      && B\arrow[rd]\arrow[rr]\arrow[dd]
        && C\arrow[rr]\arrow[rd]
          && 0\\
    & 0 \arrow[crossing over, rr]
      && A'\arrow[crossing over, dd] \arrow[crossing over, rr]
        && B'\arrow[crossing over, dd]\arrow[crossing over, rr]
          && C'\arrow[crossing over, dd] \arrow[rr]
            && 0\\
  0 \arrow[rr]
    && I^0              \bgarrow[rr] % ← \bgarrow
      && I^0 \oplus J^0 \bgarrow[rr] % ← \bgarrow
        && J^0          \bgarrow[rr] % ← \bgarrow
          && 0 \\
    & 0 \arrow[crossing over, rr]
      && I^{0'} \arrow[crossing over, rr]
        && I^{0'}\oplus J^{0'}\arrow[crossing over, rr]
          && J^{0'} \arrow[rr]
            && 0
\end{tikzcd}
\end{equation}
\end{document}

输出

在此处输入图片描述

相关内容