我尝试绘制 LTS 而不是自动机,但我不知道 TikZ 是否有针对 LTS 的特定选项,因此我尝试绘制自动机,但在 LTS 中,通常没有围绕状态的圆圈,所以现在我需要删除状态中的圆圈。我有以下代码段:
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{automata,arrows,positioning}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=5 cm, scale = 1, transform shape]
\node[initial,state,initial text=] (1A) {$1A$};
\node[state] (1B) [below of=1A] {$1B$};
\node[state] (2A) [right of=1A] {$2A$};
\path[->] (1A) edge [loop above] node {$a$} (1A)
(1A) edge [bend left=10] node {$b$} (1B)
(1A) edge [bend left=10] node {$c$} (2A);
\end{tikzpicture}
\end{figure}
\end{document}
如何在 TikZ 中绘制 LTS,或者只是从上面的自动机状态中删除圆圈?此外,是否可以更改边缘上文本的位置?例如,过渡值始终写在边缘的中间,是否可以以某种方式将其推向更接近一个状态或另一个状态(仅适用于某些边缘,而不是所有边缘)?
答案1
节点的样式 state
由样式决定state without output
,因此您可以添加draw=none
该样式以删除所有state
节点的节点边框,即state without output/.append style={draw=none}
。要减小尺寸,您还必须设置minimum size
,并调整inner sep
,例如state without output/.append style={draw=none,inner sep=2pt,minimum size=0pt}
。该inner sep
值定义从节点内容到其边框的距离,即您所指的空白。
然而,重新定义样式实际上会省去一些工作state
,即state/.style={circle,inner sep=2pt}
,您可以inner sep
根据自己的喜好进行调整。
要沿路径移动节点,请使用pos=<fraction>
作为节点的选项,其中<fraction>
是 0 到 1 之间的数字。有关$a$
和$b$
边标签,请参见下面的示例。
请注意,该right of=
语法已被弃用,取而代之的right=of
是positioning
库(您已加载的)定义的语法,请参阅PGF/TikZ 中“right of=”和“right=of”之间的区别。
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{automata,arrows.meta,positioning}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}[
>=Stealth,
shorten >=1pt,
auto,
node distance=5 cm,
scale = 1,
transform shape,
state/.style={circle,inner sep=2pt}
]
\node[initial,state,initial text=] (1A) {$1A$};
\node[state] (1B) [below=of 1A] {$1B$};
\node[state] (2A) [right=of 1A] {$2A$};
\path[->] (1A) edge [loop above] node {$a$} (1A)
(1A) edge [bend left=10] node[pos=0.2] {$b$} (1B)
(1A) edge [bend left=10] node[pos=0.75] {$c$} (2A);
\end{tikzpicture}
\end{figure}
\end{document}