在 Tikz 中将曲线路径连接到节点锚点

在 Tikz 中将曲线路径连接到节点锚点

我正在尝试加入两个节点,如下所示简单流程图例如。我想用弯曲的箭头连接两个块,这两个块的起点和终点在相同的位置(或足够接近)。相反,我在原始连接点上得到了奇怪的第二个箭头。我试过改变进出角度,但似乎没有帮助……

我的 MWE:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.arrows,arrows}   
\makeatother
\tikzstyle{block} = [rectangle, draw, fill=blue!50!black!20, 
text width=2cm, text centered, rounded corners, minimum height=2cm, minimum    width=4cm]
\tikzstyle{sblock} = [rectangle, draw, fill=blue!50!black!20, 
text width=2cm, text centered, rounded corners, minimum height=2cm, minimum     width=2cm]
\tikzstyle{line} = [draw, -latex']

\begin{document}
\begin{tikzpicture}[x=1cm,y=1cm]
 % This is the "base case"
   \node [block] at (6,7) (A) {A};  
   \node [sblock] at (1,6) (B) {B};   
   \path [line,thick] (B) edge [ bend right] node {} (A);
   \path [line,thick] (A) edge [bend right] node {} (B);

% This is closer to what I want, but a mess...
   \node [block] at (6,3) (C) {C};  
   \node [sblock] at (1,2) (D) {D};   
   \path [line,thick] (C.west) edge [bend right] node {} (D.east);
   \path [line,thick] (D.east) edge [bend right] node {} (C.west);   

 % No better
   \node [block] at (6,-1) (E) {E};  
   \node [sblock] at (1,-2) (F) {F};   
   \path [line,thick] (E.west) edge [bend right =60] node {} (F.east);
   \path [line,thick] (F.east) edge [bend right=60] node {} (E.west);   
\end{tikzpicture}}
\end{document}

愚蠢的输出

如您所见,下部块上有第二个箭头(上部块上也有一个箭头,只是被遮住了)。基本上,我希望箭头从西/东锚点开始。

答案1

一种方法是使用to路径,例如

\path [line,thick] (E.west) to[out=180,in=60] (F.east);

您也可以使用edge,但在这种情况下,您需要仅指定箭头尖端edge,而不是整个path,例如

\path [thick] (C.west) edge [line,bend left] (D.east);

为了解释原因,我首先引用手册(第二个教程):

现在是时候让 Hagen 了解另一种指定边的方法了:使用edge路径操作。此操作与to操作非常相似,但有一个重要的区别:与节点一样,edge操作生成的边不是主路径的一部分,而是稍后添加的。这似乎并不重要,但它有一些很好的结果。例如,每条边都可以有自己的箭头尖端和自己的颜色等等,而且,所有边都可以在同一条路径上给出。

虽然我不知道细节,但我猜这就是双箭头提示的原因。您会从主路径获得一个箭头提示,而从 获得另一个箭头提示edge,因为它是在第一条路径之后添加的。

在此处输入图片描述

\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.arrows,arrows}   

\tikzset{block/.style={rectangle, draw, fill=blue!50!black!20, 
text width=2cm, text centered, rounded corners, minimum height=2cm, minimum    width=4cm},
sblock/.style={rectangle, draw, fill=blue!50!black!20, 
text width=2cm, text centered, rounded corners, minimum height=2cm, minimum     width=2cm},
line/.style={draw, -latex'}}

\begin{document}
\begin{tikzpicture}
   \node [block] at (6,3) (C) {C};  
   \node [sblock] at (1,2) (D) {D};   
   \path [thick] (C.west) edge [line,bend left] (D.east);
   \path [thick] (D.east) edge [line,bend left] (C.west);   


   \node [block] at (6,-1) (E) {E};  
   \node [sblock] at (1,-2) (F) {F};   
   \path [line,thick] (E.west) to[out=180,in=60] (F.east);
   \path [line,thick] (F.east) to[out=0,in=240] (E.west);   
\end{tikzpicture}
\end{document}

相关内容