下面是一个 MWE,用来解释我的意思:
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0, ..., 4}
\node[circle,draw] (n\x) at ({2*\x}, 0) {\x};
\foreach \x in {0, ..., 3} {
\pgfmathsetmacro{\y}{\x+1}
\draw[red] (n\x) to[bend left] (n\y);
\draw[blue] (n\x) circle (.2);
\draw[gray,fill] (n\y) circle (.05);
}
\end{tikzpicture}
\end{document}
我期望这会创建几个圆形节点,n0
通过命名n4
,并通过从边到边的线连接后续对。但是,虽然引用(n\x)
正确地引用了 处的节点\x
,但(n\y)
在所有情况下都以某种方式折叠为单个点,该点甚至不在中心:
为什么\y
行为会有所不同\x
?
我知道如何使其工作,例如使用/pgf/foreach/remember
,但我很好奇。
答案1
当 时x = 0
,\pgfmathsetmacro{\y}{\x+1}
定义\y
为1.0
。则节点n1.0
表示位于节点边界n1
且与角度 成一定角度的点0
。
要\y
定义1
,您可以在此处使用以下方法之一(最后两个都是@Alenanno 建议的此评论),
pgfmath
功能int
:\pgfmathsetmacro{\y}{int(\x+1)}
,pgfmath
宏\pgfmathtruncatemacro
:\pgfmathtruncatemacro{\y}{\x+1}
,和pgffor
evaluate
附带功能的选项int
:\foreach \x [evaluate=\x as \y using int(\x+1)] in {0, ..., 3} {...}
。
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0, ..., 4}
\node[circle,draw] (n\x) at ({2*\x}, 0) {\x};
\foreach \x in {0, ..., 3} {
\pgfmathsetmacro{\y}{int(\x+1)}
\draw[red] (n\x) to[bend left] (n\y);
\draw[blue] (n\x) circle (.2);
\draw[gray,fill] (n\y) circle (.05);
}
\end{tikzpicture}
\end{document}