automata
我正在尝试使用Ti 中的包绘制一个有限状态自动机钾Z,并且很难找到一个边缘来“清除”其他状态(即不碰到它们)。读过这个答案,我使用来表示从到 的bend
边缘;虽然该边缘“清除”了和,但当我尝试对从到 的后边缘使用相同方法时,它不起作用。我还尝试了和从q1
q8
q5
q6
q7
q2
in
out
这个答案无济于事。
似乎我尝试的任何bend
、in
和out
参数组合仍然会导致该边缘碰到q3
和q4
。我知道我遗漏了什么,但是什么呢?文档包装上automata
这方面有点单薄。
这是我当前的 MWE:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{automata,arrows,topaths}
\let\oldepsilon\epsilon
\renewcommand{\epsilon}{\varepsilon}
\begin{document}
\begin{tikzpicture}[>=stealth',node distance=1.5cm,semithick,auto]
\node (l) {$\cdots$};
\node[state] (q1) [right of=l] {$1$};
\node[state] (q2) [right of=q1] {$2$};
\node[state] (q3) [above right of=q2] {$3$};
\node[state] (q4) [right of=q3] {$4$};
\node[state] (q5) [below right of=q2] {$5$};
\node[state] (q6) [right of=q5] {$6$};
\node[state] (q7) [below right of=q4] {$7$};
\node[state] (q8) [right of=q7] {$8$};
\node (r) [right of=q8] {$\cdots$};
\path[->] (l) edge node {} (q1)
(q1) edge node {$\epsilon$} (q2)
edge [bend right=60] node[swap] {$\epsilon$} (q8)
(q2) edge node {$\epsilon$} (q3)
edge node {$\epsilon$} (q5)
(q3) edge node {a} (q4)
(q4) edge node {$\epsilon$} (q7)
(q5) edge node {b} (q6)
(q6) edge node {$\epsilon$} (q7)
(q7) edge node {$\epsilon$} (q8)
edge [in=90,out=90,above] node {$\epsilon$} (q2)
(q8) edge node {} (r);
\end{tikzpicture}
\end{document}
答案1
谢谢percusse 的评论,我发现将distance
选项添加到边缘可以解决问题,调整in
和out
值以使其恰到好处:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{automata,arrows,topaths}
\let\oldepsilon\epsilon
\renewcommand{\epsilon}{\varepsilon}
\begin{document}
\begin{tikzpicture}[>=stealth',node distance=1.5cm,semithick,auto]
\node (l) {$\cdots$};
\node[state] (q1) [right of=l] {$1$};
\node[state] (q2) [right of=q1] {$2$};
\node[state] (q3) [above right of=q2] {$3$};
\node[state] (q4) [right of=q3] {$4$};
\node[state] (q5) [below right of=q2] {$5$};
\node[state] (q6) [right of=q5] {$6$};
\node[state] (q7) [below right of=q4] {$7$};
\node[state] (q8) [right of=q7] {$8$};
\node (r) [right of=q8] {$\cdots$};
\path[->] (l) edge node {} (q1)
(q1) edge node {$\epsilon$} (q2)
edge [bend right=60] node[swap] {$\epsilon$} (q8)
(q2) edge node {$\epsilon$} (q3)
edge node {$\epsilon$} (q5)
(q3) edge node {a} (q4)
(q4) edge node {$\epsilon$} (q7)
(q5) edge node {b} (q6)
(q6) edge node {$\epsilon$} (q7)
(q7) edge node {$\epsilon$} (q8)
edge [in=120,out=60,above,distance=2cm] node {$\epsilon$} (q2)
(q8) edge node {} (r);
\end{tikzpicture}
\end{document}