我正在尝试绘制小型流程图,但在布局方面遇到两个问题:
- 底部节点 B、C 的边缘应向外弯曲并绕回到 A,而不是直接进入内部。我曾想过
bend left
并bend 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
您已将 添加到
bend left
的选项中node
,但它应该作为 的选项edge
,这就是它们没有任何效果的原因。您还可以指定一个角度,例如bend left=45
,以更改弯曲度。之所以有两个标签位于线条上方,是因为线条是垂直的,并且您将其指定
below
为相对节点位置。如果您改用left
/right
,或者完全删除位置说明符,则它们将放置在线条旁边。(请注意,这种自动放置在路径旁边的做法不适用于普通线条,例如(a) -- (b)
,仅适用于edge
s [我想,对 不是很熟悉edge
,所以我不知道它的具体工作原理]。)为了把它们推得更远,你可以说例如
left=<length>
。
在下面的代码中,我曾经swap
更改过节点的放置位置。/ 的角度bend left
是bend 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. 比我早了几分钟就给出了答案:)