路径构造中的 foreach 行为不同,无论起始是节点还是坐标

路径构造中的 foreach 行为不同,无论起始是节点还是坐标

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 循环的扩展基本上有两件事:

  1. 直线运动foreach完全以局部方式进行,因为它们是按{[current point is local] ... }组发出的。这意味着“当前位置”在每次循环时都会重置。

  2. 当从节点开始画线时,TiZ 使用边界锚如果可用,那么线将不会从中心开始。您可以使用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}

上述代码的输出

相关内容