如何在块中声明坐标并从块外部访问它们?
\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
您可以不做任何修改就做到这一点。问题是您的坐标没有命名为N1
、N2
和 ,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
大小的步长,在 方向上采取 大小的步长。这允许写入不带单位的坐标,然后更改“比例”。这些 和 的值默认为和不,因此写入而不是会没那么有用。当您将它们留空时,将使用和 的默认值。x
x
7
y
y
x
y
1 cm
0 cm
(3,7)
(3 cm, 7 cm)
(0 cm, 0 cm)
x
y