tikz 循环为什么不工作,以及这两组节点为什么不同?

tikz 循环为什么不工作,以及这两组节点为什么不同?
\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 的一些字幕有点令人困惑。上面的例子产生了以下图片

周期1周期2

第一种情况,线条没有进入节点标签,但命令cycle没有被激活。第二种情况,线条进入节点标签,但命令被cycle激活。我天真地以为这两张图片应该是一样的。为什么图片不一样?为什么线条的行为不同?为什么循环的行为不同?

这里有一个类似的问题。

TikZ 中节点之间绘图时的循环选项

其中答案解释了“裸节点”的大小不为零。但它没有解释为什么在这两种情况下对节点的处理不同。短语“裸节点”没有出现在 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之间没有线条。CA

\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)它就会再次起作用。

相关内容