节点下的弯曲箭头

节点下的弯曲箭头

这是我的问题。

问题

我试图通过将长箭头分成两部分来让弯曲的箭头“进入”CxExF 节点下方。但是,我希望这两部分遵循与长箭头相同的“路径”。这意味着我需要移动/移动两部分的入口(和出口)点,以便看起来断箭真的从节点下方穿过。为了让您了解我的意思,我在下面列出了理想的情况(使用图像编辑器生成)。有什么建议吗?还有更好的方法吗?

期望的解决方案

以下是产生问题的代码。

\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\[
\begin{tikzcd}
        X \ar[r] & A &\\
        & C\times D\times F  &\\ 
        &   &\\
        &   &\\
        &   &\\
        &   & B \ar[luuuuu, bend left, in=190, out=10]
\end{tikzcd}
\]  

\[
\begin{tikzcd}
    X \ar[r] & A &\\
    & C\times D\times F \ar[u, bend left, in=240, out=0] &\\ 
    &   &\\
    &   &\\
    &   &\\
    &   & B \ar[-,luuuu, bend left, in=190, out=10]
\end{tikzcd}
\]  
\end{document}

答案1

如何设置自定义的划线图案,跳过文本出现的部分,就像这样:

输出

\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\[
\begin{tikzcd}
        X \ar[r] & A &\\
        & C\times D\times F &\\ 
        &   &\\
        &   &\\
        &   &\\
        &   & B \ar[luuuuu, bend left, in=190, out=10, dash pattern=on 80pt off 15pt]
\end{tikzcd}
\]  
\end{document}

答案2

只是为了好玩:类似于reverseclip诡计。这样您就不必手动进行调整。

\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\[
\begin{tikzcd}[execute at end picture={
\clip (C.north east) rectangle (C.south west)
(current bounding box.south west) -| (current bounding box.north east)
-| cycle;
\draw[->] (B) to[out=110,in=-90] (A);
}]
        X \ar[r] & |[alias=A]|A &\\
        & |[alias=C]| C\times D\times F  &\\ 
        &   &\\
        &   &\\
        &   &\\
        &   & |[alias=B]|B 
\end{tikzcd}
\]  
\end{document}

在此处输入图片描述

答案3

尽管我认为 marmot 的解决方案更简洁,但这里还有一个可能有用的技巧:

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

\begin{document}
\[
\begin{tikzcd}
        X \ar[r] & A &\\
        &   \tikz[remember picture]{\node (P0) at (0,0) {$C\times D\times F$}} &\\ 
        &   &\\
        &   &\\
        &   &\\
        &   & B \ar[luuuuu, bend left, in=190, out=10]
\end{tikzcd}
\]   
\tikz[overlay,remember picture]{\node[fill=white] at (P0) {$C\times D\times F$}};

\end{document}

混合解决方案

上述代码P0在矩阵单元中定义了一个 tikz 节点 ( ),并记住了它。随后,节点被填充方程式和一个白色背景,背景绘制在箭头上方。本质上,它是tikz-cd和之间的混合解决方案tikz

此时,人们可能还会考虑tikz使用matrix of nodes和层来寻求完整的解决方案,这在必须定义穿过许多节点的许多箭头时很有用:

\documentclass{article}
\usepackage{tikz-cd}
\usetikzlibrary{matrix}

\begin{document}

\pgfdeclarelayer{background}
\pgfsetlayers{background,main}

\begin{tikzpicture}
\matrix (X) [matrix of nodes,column sep=0.8cm,row sep=0.8cm,every node/.style={fill=white}]
{
    $X$ & $A$ \\
    & $C\times D \times F$ \\
    &   &\\
    &   &\\
    &   &\\
    &   & $B$ \\
};

\begin{pgfonlayer}{background}
   \draw[->] (X-1-1) -- (X-1-2) ;
   \draw[->] (X-6-3) to[in=-55, out=125] (X-1-2);
\end{pgfonlayer}
\end{tikzpicture}

\end{document}

完整版

具有多个箭头和节点的示例:

\begin{tikzpicture}
\matrix (X) [matrix of nodes,column sep=0.8cm,row sep=0.8cm,every node/.style={fill=white}]
{
    $X$ & $A$ \\
    & $C\times D \times F$ \\
    &  $K\times L \times M \times N$ &\\
    &  $G\times H \times I \times J$ &\\
    &   & \\
    &   & $B$ \\
};
\begin{pgfonlayer}{background}
\draw[->] (X-1-1) -- (X-1-2) ;
\draw[->] (X-6-3) to[in=-55, out=125] (X-1-2);
\draw[->] (X-6-3) to[in=-60, out=150] (X-2-2);
\draw[->] (X-2-2) to[in=120, out=-120] (X-4-2);
\end{pgfonlayer}
\end{tikzpicture}

多个完整 tikz

相关内容