使定向箭头在节点外开始/停止

使定向箭头在节点外开始/停止

我有以下代码:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
     [every rectangle node/.style={draw},
     every circle node/.style={draw,double}]
     \draw [->](0,0) node[rectangle] {0} -- (1,2) node[circle] {1};
     \draw [->](1,2) node[circle] {1} -- (2,1) node[circle] {2};
     \draw [->](2,1) node[circle] {2} -- (2,-1) node[circle] {3};
     \draw [->](2,-1) node[circle] {3} -- (1,-2) node[circle] {4};
     \draw [->](1,-2) node[circle] {4} -- (0,0) node[rectangle] {0};
\end{tikzpicture}
\end{document}

这就产生了下面的图片:

在此处输入图片描述

箭头从正方形/圆形内开始,并结束于圆形/正方形内。如何让边缘在正方形/圆形的边界处开始/结束?

答案1

你可以

  1. 填充节点,使内部的箭头不可见

  2. 使用该shorten >=... 选项使箭头停止在节点之外


\documentclass{article}
%\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
     [every rectangle node/.style={draw,fill=white},
     every circle node/.style={draw,double,fill=white}]
     \draw [->,shorten >=0.35cm](0,0) node[rectangle] {0} -- (1,2) node[circle] {1};
     \draw [->,shorten >=0.35cm](1,2) node[circle] {1} -- (2,1) node[circle] {2};
     \draw [->,shorten >=0.35cm](2,1) node[circle] {2} -- (2,-1) node[circle] {3};
     \draw [->,shorten >=0.35cm](2,-1) node[circle] {3} -- (1,-2) node[circle] {4};
     \draw [->,shorten >=0.35cm](1,-2) node[circle] {4} -- (0,0) node[rectangle] {0};
\end{tikzpicture}
\end{document}

或者,您可以命名您的节点并使用它们的名称,而不是硬编码的坐标(这样您还可以避免两次绘制每个节点,这在某些 pdf 查看器中看起来很模糊):

\documentclass{article}
%\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
     [every rectangle node/.style={draw},
     every circle node/.style={draw,double}]
     \node[rectangle] (0) at (0,0) {0};
     \node[circle] (1) at (1,2) {1};
     \node[circle] (2) at (2,1) {2};
     \node[circle] (3) at (2,-1) {3};
     \node[circle] (4) at (1,-2) {4};
     
     \draw[->] (0) -- (1);
     \draw[->] (1) -- (2); 
     \draw[->] (2) -- (3); 
     \draw[->] (3) -- (4); 
     \draw[->] (4) -- (0);  
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

您应该先放置节点,然后为它们命名。

\node (1) at (1, 2) {1};

指定(1)节点的名称。此名称稍后可用作坐标规范。当与许多路径操作一起使用时(如--)TikZ 自动在指定节点的边界开始(或结束)线。

这(或多或少)就是节点的全部意义!

下列

\node[rectangle] (0) at (0, 0) {0};
\node[circle]    (1) at (1, 2) {1};
\draw[->] (0) -- (1);

将在它们的边界处连接01(同时在和处添加箭头,但不会越过边界)。

在下面的代码中我使用edge手术(默认为--),这使得使用具有共同属性的线连接多个节点变得更容易一些(此处->),但也允许每个边通过使用可选参数而有所不同,比如edge[<-, green]


我猜你从手册中的这些示例但在实际节点使用方面,它们表现不佳。

甚至,every <shape> node样式很少比定义正确命名的样式更有用。

这就是为什么我定义了样式startvertex(使用更好的名称 - 我不知道这些节点代表什么)甚至声明了节点的形状。

如果您后来发现必须将所有顶点更改为不同的形状,则只需更改样式,vertex而不必遍历所有circle节点。

代码

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
  start/.style={rectangle, draw},
  vertex/.style={circle, draw, double}]
\node[start]  (0) at (0, 0) {0};
\node[vertex] (1) at (1, 2) {1};
\node[vertex] (2) at (2, 1) {2};
\node[vertex] (3) at (2,-1) {3};
\node[vertex] (4) at (1,-2) {4};
\path[->] (0) edge (1)
          (1) edge (2)
          (2) edge (3)
          (3) edge (4)
          (4) edge (0);
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容