我想要我的有限状态自动机(FSA) 边的端点转换为内部填充三角形。因此我使用了triangle 90
如下代码:
\usetikzlibrary{automata, positioning, arrows}
\begin{tikzpicture}[
-triangle 90,
node distance=3cm,
every state/.style={thick, fill=gray!10},
initial text=$ $
]
\node[state, initial] (q1) {$q_1$};
\node[state, accepting, right of=q1] (q2) {$q_2$};
\node[state, right of=q2] (q3) {$q_3$};
\draw
(q1) edge[loop above] node{0} (q1)
(q1) edge[above] node{1} (q2)
(q2) edge[loop above] node{1} (q2)
(q2) edge[bend left, above] node{0} (q3)
(q3) edge[bend left, below] node{0,1} (q2);
\end{tikzpicture}
但结果如下:
我希望我的循环能像其他边缘一样。
答案1
-triangle 90
用两个选项->
(所有边都是有方向的)和(所有箭头都是三角形)替换该选项>=triangle 90
。我猜这两种方式是等价的,但显然它们不是。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{automata, positioning, arrows}
\begin{document}
\begin{tikzpicture}[
->,
>=triangle 90,
node distance=3cm,
every state/.style={thick, fill=gray!10},
initial text=$ $
]
\node[state, initial] (q1) {$q_1$};
\node[state, accepting, right of=q1] (q2) {$q_2$};
\node[state, right of=q2] (q3) {$q_3$};
\draw
(q1) edge[loop above] node{0} (q1)
(q1) edge[above] node{1} (q2)
(q2) edge[loop above] node{1} (q2)
(q2) edge[bend left, above] node{0} (q3)
(q3) edge[bend left, below] node{0,1} (q2);
\end{tikzpicture}
\end{document}
答案2
arrows
已弃用。请使用arrows.meta
。
每种loop
风格都是最初的style, initially ->,shorten >=1pt
,并因此覆盖了箭头。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{automata, positioning, arrows.meta}
\begin{document}
\begin{tikzpicture}[
->,
>={Triangle[angle=90:5pt]},
node distance=3cm,
every state/.style={thick, fill=gray!10},
initial text=$ $
]
\node[state, initial] (q1) {$q_1$};
\node[state, accepting, right of=q1] (q2) {$q_2$};
\node[state, right of=q2] (q3) {$q_3$};
\draw
(q1) edge[loop above] node{0} (q1)
(q1) edge[above] node{1} (q2)
(q2) edge[loop above] node{1} (q2)
(q2) edge[bend left, above] node{0} (q3)
(q3) edge[bend left, below] node{0,1} (q2);
\end{tikzpicture}
\end{document}
缩短其他箭头就更好了shorten >=1pt
: