我有以下代码:
\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
你可以
填充节点,使内部的箭头不可见
使用该
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);
将在它们的边界处连接0
和1
(同时在和处添加箭头,但不会越过边界)。
在下面的代码中我使用edge
手术(默认为--
),这使得使用具有共同属性的线连接多个节点变得更容易一些(此处->
),但也允许每个边通过使用可选参数而有所不同,比如edge[<-, green]
。
我猜你从手册中的这些示例但在实际节点使用方面,它们表现不佳。
甚至,every <shape> node
样式很少比定义正确命名的样式更有用。
这就是为什么我定义了样式start
和vertex
(使用更好的名称 - 我不知道这些节点代表什么)甚至声明了节点的形状。
如果您后来发现必须将所有顶点更改为不同的形状,则只需更改样式,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}