![路径构造中的 foreach 行为不同,无论起始是节点还是坐标](https://linux22.com/image/432692/%E8%B7%AF%E5%BE%84%E6%9E%84%E9%80%A0%E4%B8%AD%E7%9A%84%20foreach%20%E8%A1%8C%E4%B8%BA%E4%B8%8D%E5%90%8C%EF%BC%8C%E6%97%A0%E8%AE%BA%E8%B5%B7%E5%A7%8B%E6%98%AF%E8%8A%82%E7%82%B9%E8%BF%98%E6%98%AF%E5%9D%90%E6%A0%87.png)
tikZ
在 的手册中,提出了以下代码来说明路径构造命令内部的用法foreach
:
下图是图 (1)。奇怪的是,当起点((0,0)
在上面的例子中)被命名节点(图 (2))替换时,结果完全不同:循环中构建的路径不再相互跟随,它们都从给定的节点开始。从命名坐标开始(图 (3))再次产生所需的行为。
\documentclass[margin=1cm]{standalone}
\usepackage{tikz}
\begin{document}
(1) \tikz \draw (0,0) foreach \x in {1,...,3} { -- (\x,1) -- (\x,0) };
(2) \tikz {\node (a) at (0,0) {}; \draw (a) foreach \x in {1,...,3} { -- (\x,1) -- (\x,0) };}
(3) \tikz {\coordinate (a) at (0,0); \draw (a) foreach \x in {1,...,3} { -- (\x,1) -- (\x,0) };}
\end{document}
我在手册中找不到任何关于此内容的信息。也许是这行神秘的文字?
请注意,节点和 pic 路径命令也以特殊方式支持 foreach 语句。
现在我应该怎么做才能使用这样的构造,但从一个节点开始?
笔记 :pgffor.sty 2020/01/08 v3.1.5b (3.1.5b)
答案1
你可以看看\draw 中 foreach 循环的扩展基本上有两件事:
直线运动
foreach
完全以局部方式进行,因为它们是按{[current point is local] ... }
组发出的。这意味着“当前位置”在每次循环时都会重置。当从节点开始画线时,Ti钾Z 使用边界锚如果可用,那么线将不会从中心开始。您可以使用
coordinate[pos=0]
路径构建时检索位置(见下文),但我不知道如何在foreach
不使用大量花招的情况下将其集成到您的代码中……
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[]
\node [circle, draw] (a) at (0,0) {Node};
\draw (a) coordinate(naked-a) -- ++(1,2)
coordinate[pos=0](border-a)
coordinate[pos=1](final);
\node [fill=red, circle, inner sep=2pt] at (naked-a) {};
\node [fill=blue, circle, inner sep=2pt] at (border-a) {};
\node [fill=green, circle, inner sep=2pt] at (final) {};
\end{tikzpicture}
\end{document}