我想使用 TikZ 自动机库来绘制有限自动机,其中无论状态是否接受,状态节点的大小都保持不变。
以下是演示该问题的 MWE。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{automata}
\tikzstyle{accepting}=[double distance=2pt, outer sep=1pt+\pgflinewidth]
\begin{document}
\begin{tikzpicture}
\draw[help lines, step=.5cm] (0, 0) grid (4,2);
\node[state] (q0) at (1,1) {};
\node[state, accepting] (q1) at (3,1) {};
\draw (q0) edge [bend left=15, ->] (q1);
\end{tikzpicture}
\end{document}
您可以看到接受节点大于不接受节点。
我相信我明白为什么正在发生这种情况:double distance
打开double
,这会导致 TikZ 绘制两个具有不同颜色和不同宽度的圆圈,首先是宽度为 的黑色圆圈2pt+2\pgflinewidth
,然后是宽度为 的白色圆圈2pt
。这导致出现双线。
有没有办法可以修改 设置的样式,accepting
使其inner sep
适当减小节点(或 )的大小,从而使节点大小不变?或者,我是否可以accepting
简单地以节点为中心绘制第二个圆圈?
答案1
当然,经过几天的努力之后,我在发布问题后不久就找到了解决方案。
我的解决方案使用calc
库和path picture
。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{automata, calc}
\tikzstyle{accepting}=[path picture={%
\draw let
\p1 = (path picture bounding box.east),
\p2 = (path picture bounding box.center)
in
(\p2) circle (\x1 - \x2 - 2pt);
}]
\begin{document}
\begin{tikzpicture}
\draw[help lines, step=.5cm] (0, 0) grid (4,2);
\node[state] (q0) at (1,1) {};
\node[state, accepting] (q1) at (3,1) {};
\draw (q0) edge [bend left=15, ->] (q1);
\end{tikzpicture}
\end{document}