\documentclass[tikz,border=2pt]{standalone}
\begin{document}
\begin{tikzpicture}
\node at (0,0) (A) {A};
\node at (0,1) (B) {B};
\node at (1,0) (C) {C};
\draw (A) -- (B) -- (C) -- cycle;
\end{tikzpicture}
\begin{tikzpicture}
\draw (0,0) node (A) {A} --
(0,1) node (B) {B} --
(1,0) node (C) {C} --
cycle ;
\end{tikzpicture}
\end{document}
TikZ 的一些字幕有点令人困惑。上面的例子产生了以下图片
第一种情况,线条没有进入节点标签,但命令cycle
没有被激活。第二种情况,线条进入节点标签,但命令被cycle
激活。我天真地以为这两张图片应该是一样的。为什么图片不一样?为什么线条的行为不同?为什么循环的行为不同?
这里有一个类似的问题。
其中答案解释了“裸节点”的大小不为零。但它没有解释为什么在这两种情况下对节点的处理不同。短语“裸节点”没有出现在 TikZ 手册中。
答案1
\begin{tikzpicture}
\node at (0,0) (A) {A};
\node at (0,1) (B) {B};
\node at (1,0) (C) {C};
\draw (A) -- (B) -- (C) -- cycle;
\end{tikzpicture}
在这种情况下,您将一些节点放置在特定坐标的中心。默认情况下,每个节点都是围绕其内容的矩形。inner sep
它的内容和边框之间有一些。默认情况下不绘制这些边框,但它们确实存在。
当你写入 时\draw (A) -- (B) -- (C) -- cycle;
,Tikz 会尝试连接节点的中心,但会在节点的边界上停止线条。因此,你会看到两条不相交的线条,一条在A
和之间B
,另一条从B
到,但由于无法闭合循环,因为你没有连续的路径,所以和C
之间没有线条。C
A
\begin{tikzpicture}
\draw (0,0) node (A) {A} --
(0,1) node (B) {B} --
(1,0) node (C) {C} --
cycle ;
\end{tikzpicture}
在这种情况下,正如percusse
已经解释的那样,你正在绘制某些坐标之间的封闭路径
\draw (0,0) -- (0,1) -- (1,0) -- cycle ;
并在其上叠加节点。这是不同的命令,会产生不同的解决方案。
答案2
裸节点指的是节点名称。当您使用节点名称时,TikZ 会尝试变得聪明,检查目标的位置并计算其形状边界上的点。目标也是如此。
因此,本质上您是在创建 3 条独立路径,而最后一条路径是一条线,因此,当与循环一起使用时,您会将最后一条线打印两次。因为循环只会返回到最后一个连续路径的起点。
如果您使用实际坐标而不是节点名称,(A.center)
它就会再次起作用。