我正在尝试使用 TikZ 绘制摩尔机。这是我目前所得到的:
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{arrows,automata,positioning}
\begin{document}
\begin{tikzpicture}[>=latex',shorten >=1pt,node distance=3cm,on grid,auto]
\node[state,initial] (q0-e) {$q_0/\epsilon$};
\node[state] (q0-1) [below right=of q0-e] {$q_0'/1$};
\node[state] (q1-0) [above right=of q0-1] {$q_1/0$};
\node[state] (q2-1) [below right=of q1-0] {$q_2/1$};
\node[state,accepting] (q3-0) [below left=of q0-1] {$q_3/0$};
\node[state,accepting] (q3-1) [below right=of q0-1] {$q_3'/1$};
\path[->] (q0-e) edge node {a} (q1-0);
\path[->] (q0-e) edge node {b} (q3-0);
\path[->] (q0-1) edge node {a} (q1-0);
\path[->] (q0-1) edge [bend right] node {b} (q3-0);
\path[->] (q1-0) edge [bend left=90,looseness=2.5] node {a} (q3-1);
\path[->] (q1-0) edge node {b} (q2-1);
\path[->] (q2-1) edge node {a} (q0-1);
\path[->] (q2-1) edge node {b} (q3-1);
\path[->] (q3-0) edge node {a} (q3-1);
\path[->] (q3-0) edge [bend right] node {b} (q0-1);
\path[->] (q3-1) edge [loop below] node {a} (q3-1);
\path[->] (q3-1) edge node {b} (q0-1);
\end{tikzpicture}
\end{document}
它会生成下面的自动机:
但我希望从 $q_1/0$ 到 $q_3'/1$ 的边能够“超出”自动机的范围,如下图红线所示:
有人能告诉我如何实现吗?谢谢。
答案1
为了达到该效果,需要额外的点。这里使用贝塞尔曲线,其中两个额外的点位于点 (q1-0) 和 (q3-1) 右侧 4 厘米处,然后(p1) .. controls (p2) and (p3) .. (p4);
应用命令。还calc
使用 tikzlibrary 来计算坐标。
代码
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{automata,arrows,trees,positioning,shapes,calc}
\begin{document}
\begin{tikzpicture}[>=latex',shorten >=1pt,node distance=3cm,on grid,auto]
\node[state,initial] (q0-e) {$q_0/\epsilon$};
\node[state] (q0-1) [below right=of q0-e] {$q_0'/1$};
\node[state] (q1-0) [above right=of q0-1] {$q_1/0$};
\node[state] (q2-1) [below right=of q1-0] {$q_2/1$};
\node[state,accepting] (q3-0) [below left=of q0-1] {$q_3/0$};
\node[state,accepting] (q3-1) [below right=of q0-1] {$q_3'/1$};
\path[->] (q0-e) edge node {a} (q1-0);
\path[->] (q0-e) edge node {b} (q3-0);
\path[->] (q0-1) edge node {a} (q1-0);
\path[->] (q0-1) edge [bend right] node {b} (q3-0);
\path[->] (q1-0) edge node {a} (q3-1);
\path[->] (q1-0) edge node {b} (q2-1);
\path[->] (q2-1) edge node {a} (q0-1);
\path[->] (q2-1) edge node {b} (q3-1);
\path[->] (q3-0) edge node {a} (q3-1);
\path[->] (q3-0) edge [bend right] node {b} (q0-1);
\path[->] (q3-1) edge [loop below] node {a} (q3-1);
\path[->] (q3-1) edge node {b} (q0-1);
\draw [->,thick,red] (q1-0) .. controls ($(q1-0)+(4cm,0)$) and
($(q3-1)+(4cm,0)$) .. (q3-1);
\end{tikzpicture}
\end{document}