尝试使用 Tikz 在 TexMaker 中绘制图灵机的图片

尝试使用 Tikz 在 TexMaker 中绘制图灵机的图片

当前的图灵机图片

我又得请教你的专业知识,帮我画一幅图。这次是为图灵机画的。我有两个关于自循环的问题和一个关于一般间距的问题。

关于自循环的第一个问题是,我想复制这种在一个自循环中有多行输入的方式:

图灵机多行输入

我已经尝试使用 \\ 和 /newline,但不起作用。在一个自循环上拥有多个输入也可以解决 q5 处重叠的问题。

有关自循环的第二个问题是,在 q2 处,自循环直接通过与 q6 的连接。

我对一般间距的问题是,我想让 q5 向右多加一个空格,但使用右侧作为其相对于 q2 的位置不起作用。

先感谢您。

梅威瑟:

\documentclass[a4paper,twoside,11pt]{article}
\usepackage{tikz, wasysym}
\usetikzlibrary{automata,positioning}

\begin{document}
\begin{tikzpicture}[shorten >=1pt,node distance=4cm,on grid,auto]
   \node[state,initial] (0) {$q_0$};
   \node[state] (1) [right=of 0] {$q_1$};
   \node[state] (2) [right=of 1] {$q_2$};
   \node[state] (3) [above=of 2] {$q_3$};
   \node[state] (4) [right=of 3] {$q_4$};
   \node[state] (5) [right=of 2] {$q_5$};
   \node[state] (6) [below=of 2] {$q_6$};
   \node[state] (7) [right=of 6] {$q_7$};
   \path[->]
    (0) edge                    node {$B\:B\:R$} (1)
    (1) edge [loop above]       node {$0\:0\:R$} (1)
    (1) edge [loop below]       node {$1\:1\:R$} (1)
    (1) edge                    node {$E\:E\:L$} (2)
    (2) edge [loop below]       node {$*\:*\:L$} (2)
    (2) edge                    node {$1\:*\:R$} (3)
    (2) edge                    node {$0\:*\:R$} (6)
    (3) edge [loop above]       node {$*\:*\:R$} (3)
    (3) edge                    node {$E\:E\:R$} (4)
    (4) edge [loop above]       node {$0\:0\:R$} (4)
    (4) edge [loop right]       node {$1\:1\:R$} (4)
    (4) edge                    node {$\Box\:1\:L$} (5)
    (6) edge [loop below]       node {$*\:*\:R$} (6)
    (6) edge                    node {$E\:E\:R$} (7)
    (7) edge [loop below]       node {$0\:0\:R$} (7)
    (7) edge [loop right]       node {$1\:1\:R$} (7)
    (7) edge                    node {$\Box\:0\:L$} (5)
    (5) edge [loop right]       node {$0\:0\:L$} (5)
    (5) edge [loop right]       node {$1\:1\:L$} (5)
    (5) edge                    node {$E\:E\:L$} (2);
\end{tikzpicture}

\end{document}

答案1

首先,您可以通过几种方式将两行文本堆叠到循环的标签上。如果您已amsmath加载包,则可以编写node {$\substack{line 1\\line 2}$},这会将它们排版得更小。如果您希望标签与普通文本大小相同,请使用node {$\begin{matrix} line 1 \\ line 2 \end{matrix}$}

获取节点_5 更靠右,您可以指定它的位置为\node[state] (5) [right=6cm of 2] {$q_5$};

最后,为了避免自循环与箭头冲突,请按如下方式指定其方向:(edge [in=30, out=60, loop]输入和输出值表示圆周的度数)。

这是最终的代码。

\documentclass[a4paper,twoside,11pt]{article}
% needed for the matrix envirionment
\usepackage{amsmath}
\usepackage{tikz, wasysym}
\usetikzlibrary{automata,positioning}

\begin{document}
\begin{tikzpicture}[shorten >=1pt,node distance=4cm,on grid,auto]
   \node[state,initial] (0) {$q_0$};
   \node[state] (1) [right=of 0] {$q_1$};
   \node[state] (2) [right=of 1] {$q_2$};
   \node[state] (3) [above=of 2] {$q_3$};
   \node[state] (4) [right=of 3] {$q_4$};
   % push this node further to the right
   \node[state] (5) [right=6cm of 2] {$q_5$};
   \node[state] (6) [below=of 2] {$q_6$};
   \node[state] (7) [right=of 6] {$q_7$};
   \path[->]
    (0) edge                    node {$B\:B\:R$} (1)
    (1) edge [loop above]       node {$\begin{matrix}0\:0\:R\\1\:1\:R\end{matrix}$} (1)
    (1) edge [loop below]       node {$1\:1\:R$} (1)
    (1) edge                    node {$E\:E\:L$} (2)
    (2) edge [in=30, out=60, loop]       node {$*\:*\:L$} (2)
    (2) edge                    node {$1\:*\:R$} (3)
    (2) edge                    node {$0\:*\:R$} (6)
    (3) edge [loop above]       node {$*\:*\:R$} (3)
    (3) edge                    node {$E\:E\:R$} (4)
    (4) edge [loop above]       node {$0\:0\:R$} (4)
    (4) edge [loop right]       node {$1\:1\:R$} (4)
    (4) edge                    node {$\Box\:1\:L$} (5)
    (6) edge [loop below]       node {$*\:*\:R$} (6)
    (6) edge                    node {$E\:E\:R$} (7)
    (7) edge [loop below]       node {$0\:0\:R$} (7)
    (7) edge [loop right]       node {$1\:1\:R$} (7)
    (7) edge                    node {$\Box\:0\:L$} (5)
    (5) edge [loop right]       node {$\begin{matrix}0\:0\:L\\1\:1\:L\end{matrix}$} (5)
    (5) edge                    node {$E\:E\:L$} (2);
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容