我正在尝试绘制如下的自动机:
\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.8cm]
\node[initial,state] (q1) {$1$};
\node[state] (q2) [right of=q1] {$2$};
\node[state] (q4) [below right of=q2] {$4$};
\node[state, accepting] (q3) [above right of=q4] {$3$};
\path[->] (q1) edge node {a} (q2);
\path[->] (q2) edge [bend left] node {b} (q3);
\path[->] (q3) edge [bend left] node {a} (q2);
\path[->] (q2) edge node {b} (q4);
\path[->] (q4) edge node {a} (q3);
\end{tikzpicture}
但是,弯曲似乎“太多了”,并且会干扰 q4 的两个箭头。此外,我希望这两个箭头上的标签位于箭头的另一侧。遗憾的是,我在网上找不到如何做到这一点,所以我转向了此页面。
答案1
bend left
您可以使用可选参数和来影响弯曲程度bend right
。默认值为bend left=30
,这意味着连接线以与直接连接线成 30 度的角度离开和进入节点。bend left=20
将是一条更平缓的曲线。如果您希望所有曲线都弯曲相同的量,而无需每次都明确指定,则可以将其添加bend angle=20
到tikzpicture
选项中。
要将线上的节点交换到另一侧,只需将键添加[swap]
到节点选项中。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{automata, arrows}
\begin{document}
\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.8cm]
\node[initial,state] (q1) {$1$};
\node[state] (q2) [right of=q1] {$2$};
\node[state] (q4) [below right of=q2] {$4$};
\node[state, accepting] (q3) [above right of=q4] {$3$};
\path[->] (q1) edge node {a} (q2);
\path[->] (q2) edge [bend left=20] node {b} (q3);
\path[->] (q3) edge [bend left=20] node {a} (q2);
\path[->] (q2) edge node [swap] {b} (q4);
\path[->] (q4) edge node [swap] {a} (q3);
\end{tikzpicture}
\end{document}