全球坐标

全球坐标

如何在块中声明坐标并从块外部访问它们?

\begin{tikzpicture}
  \foreach \x / \y in {
    1 /  3,
    2 /  8,
    3 / 14,
  }{
    \coordinate (N\x) at (\x,\y);
    \path[draw] (N\x) circle (1em);      %% ok
  };
  \path[draw] (N1) -- (N3);              %% not ok
\end{tikzpicture}

答案1

删除坐标之间的空格。即

\foreach \x / \y in {1/3,2/8,3/14}

或者

\foreach \x / \y in {
   1/3,
   2/8,
   3/14%
}

应该管用。

笔记

正如 Andrew 指出的那样,%在第二个代码块中, 是必需的,以避免在预期的 后附加额外的空格等14。这在第一个代码块中不是必需的,因为14后面紧跟着}。对于短列表,第一个代码块可能是执行此操作的最佳方法。

%问题的原始代码在上面第二个块中的 处使用了逗号,这导致foreach执行了额外的不需要的循环迭代,而没有内容。这导致创建了一个名为 的坐标N(1,1)这既不想要也不可取。

答案2

正如其他人的答案所写,这不是一个问题,global coordinates而是一个坐标名称错误的问题,因为在\foreach

在这种特殊情况下,会更简洁:(但在一般情况下, \coordinate (N\x) at (\x,\y);可以避免这一行)

\documentclass{scrartcl}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
  \foreach \y [count=\x from 1] in {3,8,14}
      \draw   (\x,\y) coordinate (N\x) circle (1em);
  \draw   (N1) -- (N3); 
\end{tikzpicture} 

\end{document}

答案3

您可以不做任何修改就做到这一点。问题是您的坐标没有命名为N1N2和 ,N3因为存在虚假空格。将其更改为:

\begin{tikzpicture}
  \foreach \x / \y in {1/3,2/8,3/14%
  }{
    \coordinate (N\x) at (\x,\y);
    \path[draw] (N\x) circle (1em);      %% ok
  };
  \path[draw] (N1) -- (N3);
\end{tikzpicture}

你很好。

正如 Andrew 已经提到的,作为对你的问题的评论。最后一个,必须去掉。它再次循环运行,并且\x\y空。这实际上在 处绘制了一个额外的圆圈(1,1)并定义了坐标N。老实说,我不完全确定为什么它会被绘制在 处(1,1)。我希望它默认为(0,0)。有人对此有解释吗?

编辑:我想我知道为什么它发生在 处(1,1)。坐标系具有x和的值y,当您说类似(3,7)这样的话时,意味着在方向上采取3大小的步长,在 方向上采取 大小的步长。这允许写入不带单位的坐标,然后更改“比例”。这些 和 的值默认为和不,因此写入而不是会没那么有用。当您将它们留空时,将使用和 的默认值。xx7yyxy1 cm0 cm(3,7)(3 cm, 7 cm)(0 cm, 0 cm)xy

相关内容