改变弯曲角度并交换箭头上的节点位置

改变弯曲角度并交换箭头上的节点位置

我正在尝试绘制如下的自动机:

\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=20tikzpicture选项中。

要将线上的节点交换到另一侧,只需将键添加[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}

相关内容