使用 TikZ 绘制曲线路径的问题

使用 TikZ 绘制曲线路径的问题

我正在尝试绘制小型流程图,但在布局方面遇到两个问题:

  • 底部节点 B、C 的边缘应向外弯曲并绕回到 A,而不是直接进入内部。我曾想过bend leftbend right会这样做,但它们似乎没有任何效果。
  • 某些边缘上的文本需要与其他元素进行更多隔离。我可以指定与绘制边缘的偏移量来放置文本吗?

    \documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{arrows}
    \begin{document}
    \begin{tikzpicture}[->,>=stealth',shorten >=1pt,node distance=2.5cm,auto,main node/.style={rectangle,rounded corners,draw,align=center}]
    
    \node[main node] (1) {$A$};
    \node[main node] (2) [below left of=1] {$D$};
    \node[main node] (4) [below of=2] {$B$};
    \node[main node] (3) [below right of=1] {$E$};
    \node[main node] (5) [below of=3] {$C$};
    
    \path
    (1) edge node [left] {$d$} (2)
        edge node [right] {$e$} (3)
    (2) edge node [below] {$b$} (4)
    (3) edge node [below] {$c$} (5)
    (4) edge node [bend left] {$a$} (1)
    (5) edge node [bend right] {$a$} (1);
    
    \end{tikzpicture}
    \end{document}
    

答案1

  1. 您已将 添加到bend left的选项中node,但它应该作为 的选项edge,这就是它们没有任何效果的原因。您还可以指定一个角度,例如bend left=45,以更改弯曲度。

  2. 之所以有两个标签位于线条上方,是因为线条是垂直的,并且您将其指定below为相对节点位置。如果您改用left/ right,或者完全删除位置说明符,则它们将放置在线条旁边。(请注意,这种自动放置在路径旁边的做法不适用于普通线条,例如(a) -- (b),仅适用于edges [我想,对 不是很熟悉edge,所以我不知道它的具体工作原理]。)

    为了把它们推得更远,你可以说例如left=<length>

在下面的代码中,我曾经swap更改过节点的放置位置。/ 的角度bend leftbend right通过反复试验找到的。

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,node distance=2.5cm,auto,main node/.style={rectangle,rounded corners,draw,align=center}]

\node[main node] (1) {$A$};
\node[main node] (2) [below left of=1] {$D$};
\node[main node] (4) [below of=2] {$B$};
\node[main node] (3) [below right of=1] {$E$};
\node[main node] (5) [below of=3] {$C$};

\path
(1) edge node [swap] {$d$} (2)
    edge node  {$e$} (3)
(2) edge node [swap] {$b$} (4)
(3) edge node  {$c$} (5)
(4) edge [bend left=60] node  {$a$} (1)
(5) edge [bend right=60] node[swap]  {$a$} (1);

\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

您可以指定边缘的“入”角和“出”角,然后它看起来像这样(我擅自重命名了您的节点......)

\documentclass{article}
\usepackage{tikz}
    \usetikzlibrary{arrows}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}

\begin{document}
\begin{tikzpicture}[->,node distance=2.5cm,auto,main node/.style={rectangle,rounded corners,draw,align=center}]

\node[main node] (A) {$A$};
\node[main node] (D) [below left of=A] {$D$};
\node[main node] (B) [below of=D] {$B$};
\node[main node] (E) [below right of=A] {$E$};
\node[main node] (C) [below of=E] {$C$};

\path (A) edge node [left] {$d$} (D);
\path (A) edge node [right] {$e$} (E);
\path (D) edge node [right] {$b$} (B);
\path (E) edge node [left] {$c$} (C);
\path (B) edge [out=135,in=180] node [left] {$a$} (A);
\path (C) edge [out=45,in=0] node [right] {$a$} (A);

\end{tikzpicture}
\end{document}

在此处输入图片描述

好吧,看来@Torbjørn T. 比我早了几分钟就给出了答案:)

相关内容