使用 `\foreach` 对多个变量进行迭代,并且 '\remember' 其中一个变量未按预期工作

使用 `\foreach` 对多个变量进行迭代,并且 '\remember' 其中一个变量未按预期工作

我对 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}

在此处输入图片描述

相关内容