【问题标题】:connect nodes with Tikz without crossing other blocks用 Tikz 连接节点而不跨越其他块
【发布时间】:2019-05-09 16:25:32
【问题描述】:

我想在我的代码中连接块B和M,而不用连接线“切割”F。如何强制连接放大连接线并避免F?

\documentclass[11pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc,shapes.geometric,arrows,positioning,intersections}

\begin{document}


\begin{tikzpicture}[auto,node distance=1cm,thick,
main node/.style={black,draw,minimum width=1.5cm,minimum height=0.75cm}]%circle,draw,font=\sffamily\Large\bfseries}]

\node[main node] (L)                     {L};
\node[main node] (F) [left = of L  ] {F};
\node[main node] (C) [below = of F  ] {M};
\node[main node] (B)    [right = of L  ] {B};
\node[main node] (AP)    [below = of B  ] {AP};
\node[main node] (A)    [below = of L  ] {A};
\node[main node] (H)  [right = of B  ] {H};
\node[main node] (G) [right = of H] {G};
\node[main node] (BR)  [below = of G] {BR};
\node[main node] (LR)   [below = of BR] {LR};
\node[main node] (U)  [below = of AP  ] {U};
\node[main node] (P)  [below = of U  ] {P};
\path[every node/.style={font=\sffamily\small}]
(L)      edge node [right]                   {} (B)
(L)      edge node [right]                   {} (F)
(L)      edge node [right]                   {} (C)
(F)      edge node [right]                   {} (C)
(B.north) edge [out=90,in=90] node [right] {} (F.north)
(B.north) edge [out=90,in=180] node [right] {} (C.west)
(B)      edge node [right]                   {} (AP)
(B)      edge node [right]                   {} (A)
(AP.east) edge [out=0,in=270] node [left]    {} (H.south)
(B)      edge node [right]                   {} (H)
(H)    edge node [right]                   {} (G)
(U.east) edge [out=0,in=270] node [left]   {} (H.south)
(P.east) edge [out=0,in=270] node [left]   {} (H.south)
(U)      edge node [right]                 {} (P)
(BR.west) edge [out=180,in=270] node [right] {} (H.south)
(LR.west)  edge [out=180,in=270] node [right] {} (H.south)
(BR.east) edge [out=0,in=0] node [right]     {} (G.east)
(LR.east) edge [out=0,in=0] node [right]     {} (G.east);
\end{tikzpicture}


\end{document}

这就是我现在得到的

这就是我想要的

谢谢!

【问题讨论】:

    标签: latex tikz


    【解决方案1】:

    在 tikz 中没有直接的方法可以做到这一点,但这可以通过添加中间节点来实现。 这里有两种方法可以做到这一点。

    第一个(蓝色)在主路径中使用边缘。由于边只有一个分支,因此在适当的位置创建坐标并在另一边重复使用。

    第二种方式(红色)使用带有多个中间节点的常规 tikz 线。如果需要,它更灵活,并且可以使用任意数量的中间节点。

    中间节点的位置应该调整以达到预期的效果。

    \documentclass[11pt]{standalone}
    
    \usepackage{tikz}
    \usetikzlibrary{calc,shapes.geometric,arrows,positioning,intersections}
    
    \begin{document}
    
    
    \begin{tikzpicture}[auto,node distance=1cm,thick,
    main node/.style={black,draw,minimum width=1.5cm,minimum height=0.75cm}]%circle,draw,font=\sffamily\Large\bfseries}]
    
    \node[main node] (L)                     {L};
    \node[main node] (F) [left = of L  ] {F};
    \node[main node] (C) [below = of F  ] {M};
    \node[main node] (B)    [right = of L  ] {B};
    \node[main node] (AP)    [below = of B  ] {AP};
    \node[main node] (A)    [below = of L  ] {A};
    \node[main node] (H)  [right = of B  ] {H};
    \node[main node] (G) [right = of H] {G};
    \node[main node] (BR)  [below = of G] {BR};
    \node[main node] (LR)   [below = of BR] {LR};
    \node[main node] (U)  [below = of AP  ] {U};
    \node[main node] (P)  [below = of U  ] {P};
    \path[every node/.style={font=\sffamily\small}]
    (L)      edge node [right]                   {} (B)
    (L)      edge node [right]                   {} (F)
    (L)      edge node [right]                   {} (C)
    (F)      edge node [right]                   {} (C)
    (B.north) edge [out=90,in=90] node [right] {} (F.north)
    %%%% (B.north) edge [out=90,in=180] node [right] {} (C.west)
    %west_of_F is an intermediate node to allow a proper connection of B and C
    (B.north) edge [blue,out=90,in=90] coordinate[at end] (west_of_F) ($(F.west)+(-1cm,0)$) 
    (west_of_F) edge [blue, out=-90,in=180] (C.west)
    (B)      edge node [right]                   {} (AP)
    (B)      edge node [right]                   {} (A)
    (AP.east) edge [out=0,in=270] node [left]    {} (H.south)
    (B)      edge node [right]                   {} (H)
    (H)    edge node [right]                   {} (G)
    (U.east) edge [out=0,in=270] node [left]   {} (H.south)
    (P.east) edge [out=0,in=270] node [left]   {} (H.south)
    (U)      edge node [right]                 {} (P)
    (BR.west) edge [out=180,in=270] node [right] {} (H.south)
    (LR.west)  edge [out=180,in=270] node [right] {} (H.south)
    (BR.east) edge [out=0,in=0] node [right]     {} (G.east)
    (LR.east) edge [out=0,in=0] node [right]     {} (G.east);
    
    \draw[red] (B.north) to[out=90,in=0]   ($(B.north)+(-3cm,2cm)$)
                         to [out=180,in=90] ($(C.west)+(-1.1cm,2cm)$) 
                         to [out=-90,in=180] (C.west);
    
    \end{tikzpicture}
    
    
    \end{document}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多