![TikZ 自动机制作一个指向无处的箭头](https://linux22.com/image/248516/TikZ%20%E8%87%AA%E5%8A%A8%E6%9C%BA%E5%88%B6%E4%BD%9C%E4%B8%80%E4%B8%AA%E6%8C%87%E5%90%91%E6%97%A0%E5%A4%84%E7%9A%84%E7%AE%AD%E5%A4%B4.png)
我有以下 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}
生成以下图像:
请注意,我使用了上面的隐藏节点(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}