我对 TikZ 并不陌生,但现在正在尝试一些更高级的东西,并对以下问题感到困惑。通过研究解决方案,我发现这个网站上有很多很好的答案和很好的解释!
我想\foreach
同时迭代多个变量,\remember
其中一个变量用于将节点彼此相邻定位。它没有像我预期的那样工作,所以我将范围缩小到值列表的呈现方式\foreach
——如果我给出一个范围定义,并且列表的开头和结尾只有 1 个项目(下面的第一种情况),它适用于 1 个变量...
。但是,如果我将列表项拼写出来(下面的第二种情况),它就不起作用。我认为我需要将列表项拼写出来,因为我实际上想组合多个变量来指定每个节点的不同形状等(参见下面的第三种情况)。
这是我的 MWE:
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
all rectangles next to each other:
\begin{tikzpicture}[every node/.style={draw}]
\node (A) [rectangle] {};
\foreach \x [remember=\x as \lastx (initially A)] in {B,...,E} {
\node (\x) [rectangle,right=of \lastx] {};
}
\end{tikzpicture}
2nd and further rectangles on top of each other:
\begin{tikzpicture}[every node/.style={draw}]
\node (A) [rectangle] {};
\foreach \x [remember=\x as \lastx (initially A)] in {B,C,D,E} {
\node (\x) [rectangle,right=of \lastx] {};
}
\end{tikzpicture}
goal: iterate over 2 variables at the same time:
\begin{tikzpicture}[every node/.style={draw}]
\node (A) [rectangle] {};
\foreach \x/\y [remember=\x as \lastx (initially A)] in {B/circle,C/rectangle,D/circle,E/rectangle} {
\node (\x) [\y,right=of \lastx] {};
}
\end{tikzpicture}
\end{document}
有一个相关问题(相关问题),但解决方案使用了 2 个嵌套\foreach
循环,当然,您可以使用符号。但是,我认为在我的例子中...
我不能使用符号。...
我正在使用 PGF/TikZ 2.10(MacTeX 2011)。
答案1
显然\lastx
没有正确评估,它总是A不幸的是,我也不知道为什么,不过这里有一些建议:
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes}
\begin{document}
\verb! apparantly `\lastx` is not increased: !
\begin{tikzpicture}[every node/.style={draw}]
\node (A) at (1,0) [rectangle] {A};
\foreach \x/\y [remember=\x as \lastx (initially A)] in {B/2,C/3,D/4,E/5}
{ \node[rectangle] (\x) at (\y,0) {\lastx \x};
}
\end{tikzpicture}
\verb! you could use `\xdef` to do it yourself !
\begin{tikzpicture}[every node/.style={draw}]
\node (A) [rectangle] {};
\xdef\lastx{A}
\foreach \x in {B,C,D,E}
{ \node (\x) [rectangle,right=of \lastx] {};
\xdef\lastx{\x}
}
\end{tikzpicture}
\verb! or you could use absolute positions: !
\begin{tikzpicture}[every node/.style={draw}]
\pgfmathsetmacro{\multi}{1.245}
\foreach \x in {1,...,5}
{ \node at (\multi*\x,0) {};
}
\end{tikzpicture}
\verb! this also works for multiple variables !
\begin{tikzpicture}[every node/.style={draw}]
\pgfmathsetmacro{\multi}{1.245}
\foreach \x/\shp/\clr in {1/rectangle/green,2/circle/blue,3/diamond/red,4/ellipse/yellow,5/trapezium/orange}
{ \node[shape=\shp,fill=\clr] at (\multi*\x,0) {};
}
\end{tikzpicture}
\end{document}