在绘制 tikz 自动机时,我总是省略初始文本,只使用箭头来指示状态是初始的。为此,我添加了
\tiksset[initial text={}]
到我的 tex 文件的序言部分。
到目前为止,这运行良好,但当我在图中水平放置几个自动机时,我注意到初始箭头占据了太多空间。您可以在下图中看到这种现象。红色矩形显示边界框。
我怀疑发生这种情况是因为文本节点仍然存在并且具有非负大小。但是,我希望边界框从箭头开始的地方开始。有人知道如何在不手动更改边界框的情况下实现这一点吗?谢谢!
上图是以下代码的结果。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{automata}
\tikzset{initial text={}}
\begin{document}
\begin{tikzpicture}
\node[state, initial] {};
\draw[red, dashed] (current bounding box.south west) rectangle (current bounding box.north east);
\end{tikzpicture}
\end{document}
答案1
这是因为当您清除初始节点的文本时,您实际上并没有减小节点大小。我draw
在节点选项中添加了 ,以明确您的猜测是正确的:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{automata}
\tikzset{initial text={}}
\makeatletter
\tikzstyle{initial by arrow}= [after node path=
{
{
[to path=
{
[->,double=none,every initial by arrow]
([shift=(\tikz@initial@angle:\tikz@initial@distance)]\tikztostart.\tikz@initial@angle)
node [shape=rectangle,anchor=\tikz@initial@anchor,draw] {\tikz@initial@text}
-- (\tikztostart)}]
edge ()
}
}]
\makeatother
\begin{document}
\begin{tikzpicture}
\node[state, initial] {};
\draw[red, dashed] (current bounding box.south west) rectangle (current bounding box.north east);
\end{tikzpicture}
\end{document}
相反,draw
您可以放置一个inner sep=0
很好的近似值,或者删除节点或添加overlay
以保留节点但不将其包含在边界框中。