TikZ 自动机制作一个指向无处的箭头

TikZ 自动机制作一个指向无处的箭头

我有以下 TikZ 代码:

\documentclass{standalone} 
\usepackage{tikz}
\usetikzlibrary{arrows,automata} 
\begin{document}
    \begin{tikzpicture}[shorten >=1pt,node distance=2cm,>=stealth',thick]
        \node[state] (1) {$1$};
        \node[state,draw=none] (d1) [left of=1] {};
        \draw [->] (1) to[loop above] node[auto] {} (1);
        \draw [->] (1) to[bend left] node[auto] {} (d1);
    \end{tikzpicture}
\end{document}

生成以下图像:

TikZ 输出

请注意,我使用了上面的隐藏节点(d1)来产生向左的漂亮箭头。

可悲的是,现在我有一个圆圈大小的空白空间。

我想保留箭头,我希望箭头看起来一样,但我想摆脱那个空白处。

有没有办法在不引入不可见节点的情况下绘制箭头?或者有没有办法裁剪图形?有什么优雅的方法来解决这个问题?

谢谢!

答案1

您可以使用\coordinate代替\node

\documentclass{standalone} 
\usepackage{tikz}
\usetikzlibrary{arrows,automata} 
\begin{document}
    \begin{tikzpicture}[shorten >=1pt,node distance=2cm,>=stealth',thick]
        \node[state] (1) {$1$};
        \coordinate[left of=1] (d1);
        \draw [->] (1) to[loop above] node[auto] {} (1);
        \draw [->] (1) to[bend left] node[auto] {} (d1);
    \end{tikzpicture}
\end{document}

在此处输入图片描述

为了补偿箭头缩短,你可以使用

   \draw [->,shorten >=0pt] (1) to[bend left] node[auto] {} (d1);

在上面的代码中。

答案2

您还可以使用++选项来指定从上一个位置向左移动 2 厘米

\documentclass{standalone} 
\usepackage{tikz}
\usetikzlibrary{arrows,automata} 
\begin{document}
    \begin{tikzpicture}[thick]
        \node[state] (1) {$1$};
        \draw [->] (1) to[loop above] node[auto] {} (1);
        \draw [->] (1) to[bend left] node[auto] {} ++ (-2,0);
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

紧凑代码是

\documentclass{standalone} 
\usepackage{tikz}
\usetikzlibrary{arrows,automata} 
\begin{document}
    \begin{tikzpicture}[thick]
        \node[state] (1) {$1$};
        \draw [->] (1) edge   [loop above]  ()
                       edge   [bend left]   ++ (-2,0);
    \end{tikzpicture}
\end{document}

答案4

对于您的 MWE,一个简单的解决方案使用以下overlay选项:

\documentclass{standalone} 
\usepackage{tikz}
\usetikzlibrary{arrows,automata} 
\begin{document}
    \begin{tikzpicture}[shorten >=1pt,node distance=2cm,>=stealth',thick]
        \node[state] (1) {$1$};
        \node[state,draw=none,overlay] (d1) [left of=1] {};
        \draw [->] (1) to[loop above] node[auto] {} (1);
        \draw [->] (1) to[bend left] node[auto] {} (d1);
    \end{tikzpicture}
\end{document}

相关内容