![尝试使用 Tikz 在 TexMaker 中绘制图灵机的图片](https://linux22.com/image/323280/%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%20Tikz%20%E5%9C%A8%20TexMaker%20%E4%B8%AD%E7%BB%98%E5%88%B6%E5%9B%BE%E7%81%B5%E6%9C%BA%E7%9A%84%E5%9B%BE%E7%89%87.png)
我又得请教你的专业知识,帮我画一幅图。这次是为图灵机画的。我有两个关于自循环的问题和一个关于一般间距的问题。
关于自循环的第一个问题是,我想复制这种在一个自循环中有多行输入的方式:
我已经尝试使用 \\ 和 /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}