自动机后边箭头进入其他状态

自动机后边箭头进入其他状态

automata我正在尝试使用Ti 中的包绘制一个有限状态自动机Z,并且很难找到一个边缘来“清除”其他状态(即不碰到它们)。读过这个答案,我使用来表示从到 的bend边缘;虽然该边缘“清除”了和,但当我尝试对从到 的后边缘使用相同方法时,它不起作用。我还尝试了和从q1q8q5q6q7q2inout这个答案无济于事。

似乎我尝试的任何bendinout参数组合仍然会导致该边缘碰到q3q4。我知道我遗漏了什么,但是什么呢?文档包装上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}

MWE 编译

答案1

谢谢percusse 的评论,我发现将distance选项添加到边缘可以解决问题,调整inout值以使其恰到好处:

\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}

编译解决方案

相关内容