问题。
为什么
\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\foreach \index in {0,1,2,3}{
\node (v\index) at (\index cm, \index cm)[]{$v_{\index}$};
%\draw (v0)--(v1);
\draw (v0)--($(v0)+(1 cm,0 cm)$);
}
\end{tikzpicture}
\end{document}
编译,同时
\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\foreach \index in {0,1,2,3}{
\node (v\index) at (\index cm, \index cm)[]{$v_{\index}$};
\draw (v0)--(v1);
%\draw (v0)--($(v0)+(1 cm,0 cm)$);
}
\end{tikzpicture}
\end{document}
导致错误消息
未发现名为 v1 的形状。
?
评论。
- 如果目前的建议不值得推荐,我也希望得到关于如何使节点名称取决于循环变量。
- 我只是不明白上述错误消息的原因,无论是重读代码,还是手册,还是阅读有关 TikZ 中命名节点的讨论——节点名称似乎已经定义。我希望这不是一个错误,而是我忽略了一些很容易修复的东西。
答案1
错误消息的原因已在 CarLaTeX 的评论。
我假设您想用线连接节点。然后,可以通过选项记住前一个节点。当仅定义一个节点时,remember
该构造将排除第一个循环。\if
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \index [remember=\index as \lastindex] in {0,1,2,3}{
\node (v\index) at (\index cm, \index cm)[]{$v_{\index}$};
\ifnum\index>0
\draw (v\lastindex) -- (v\index);
\fi
}
\end{tikzpicture}
\end{document}
不包含以下内容的变体\ifnum
:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \index in {0, 1, 2, 3} {
\node (v\index) at (\index cm, \index cm)[]{$v_{\index}$};
}
\draw
\foreach \index [remember=\index as \lastindex (initially 0)] in {1, 2, 3} {
(v\lastindex) -- (v\index)
}
;
\end{tikzpicture}
\end{document}
答案2
一个可能的解决方案是定义循环之外的第一个节点:
\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node (v0) {$v_0$};
\foreach[evaluate=\index as \indexj using int(\index+1)] \index in {0,1,2}{
\node (v\indexj) at (\indexj cm, \indexj cm)[]{$v_{\indexj}$};
\draw (v\index)--(v\indexj);
}
\end{tikzpicture}
\end{document}