自动机


绘制自动机或者图灵机,要记住以下几点

  1. 自动机每一个状态都是一个带有状态选项的节点;
  2. 为了放置状态,既可以用绝对坐标,也可以用诸如above、left之类的相对坐标;
  3. 每一个状态节点都应该有一个唯一的名字;
  4. 接受和初始状态使用过选项accepting、initial分别实现的;
  5. 一旦状态固定下来,就可以添加边;
  6. 循环可以用edge [loop]实现。
自动机要用到“automata”库,所以请在LaTeX导言中加入
\usetikzlibrary{automata}

没有输出和有输出的状态由下面两个风格定义

state without output
state with output
比如
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\node[state without output] {$q_0$};
\node[state with output] at (2,0) {$q_1$ \nodepart{lower} $00$};
\end{tikzpicture}
当然你也可以用风格
state
重新定义状态。比如
\begin{tikzpicture}[state/.style=state with output]
\node[state] {$q_0$ \nodepart{lower} $11$};
\node[state] at (2,0) {$q_1$ \nodepart{lower} $00$};
\end{tikzpicture}
或者用风格
every state
比如
\begin{tikzpicture}[shorten >=1pt,node distance=2cm,on grid,>=stealth',
every state/.style={draw=blue!50,very thick,fill=blue!20}]
\node[state,initial] (q_0) {$q_0$};
\node[state] (q_1) [above right=of q_0] {$q_1$};
\node[state] (q_2) [below right=of q_0] {$q_2$};
\path[->] (q_0) edge node [above left] {0} (q_1)
edge node [below left] {1} (q_2)
(q_1) edge [loop above] node {0} ()
(q_2) edge [loop below] node {1} ();
\end{tikzpicture}

初始状态可以用风格

initial
如果初始状态要带箭头,可以用
initial by arrow
初始状态的文本可以用
initial text=文本
如果不赋值,则为空文本。初始状态的方向可以用
initial where=方向
“方向”可以是“above”、“below”、“left”、“right”等。 初始状态箭头的长度由
initial distance=长度
设置。风格
every initial by arrow
是所有的路径都包含箭头和文本。比如
\begin{tikzpicture}[every initial by arrow/.style={text=red,->>}]
\node[state,initial,initial distance=2cm] {$q_0$};
\end{tikzpicture}
你还可以使用初始状态的简洁形式
initial above
initial below
initial left
initial right
initial by diamond

接受状态可以用风格

accepting
如果接受状态要带箭头,可以用
accepting by arrow
接受状态的文本可以用
accepting text=文本
如果不赋值,则为空文本。接受状态的方向可以用
accepting where=方向
“方向”可以是“above”、“below”、“left”、“right”等。 接受状态箭头的长度由
accepting distance=长度
设置。风格
every accepting by arrow
是所有的路径都包含箭头和文本。你还可以使用接受状态的简洁形式
accepting above
accepting below
accepting left
accepting right
accepting by diamond


目录