如何避免 tikz 自动机初始状态下的多余空间

如何避免 tikz 自动机初始状态下的多余空间

在绘制 tikz 自动机时,我总是省略初始文本,只使用箭头来指示状态是初始的。为此,我添加了

\tiksset[initial text={}]

到我的 tex 文件的序言部分。

到目前为止,这运行良好,但当我在图中水平放置几个自动机时,我注意到初始箭头占据了太多空间。您可以在下图中看到这种现象。红色矩形显示边界框。

tikz 图片

我怀疑发生这种情况是因为文本节点仍然存在并且具有非负大小。但是,我希望边界框从箭头开始的地方开始。有人知道如何在不手动更改边界框的情况下实现这一点吗?谢谢!

上图是以下代码的结果。

    \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以保留节点但不将其包含在边界框中。

相关内容