我有以下 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}