TikZ,foreach 和 sum

TikZ,foreach 和 sum

我正在尝试创建一个不同大小的矩形列表,从上一个矩形的末尾开始。我使用带有 TeX 长度的 foreach 循环,但我没有得到我想要的结果,我真的不明白为什么。以下是代码:

\documentclass[svgnames,smaller]{beamer}
\usepackage{tikz}
\usepackage[utf8]{inputenc}
\usetheme{Warsaw}

\begin{document}
\begin{frame}
\begin{tikzpicture}
\newlength{\prev}
\setlength{\prev}{30pt}
\foreach \size / \colorRectangle in {100pt/NavyBlue, 90pt/DarkRed, 60pt/DarkGreen, 40pt/DarkMagenta} {
    \draw[fill=\colorRectangle] (\prev, 5pt) rectangle +(\size, -10pt);
    \pgfmathaddtolength{\prev}{+\size};
}
\end{tikzpicture}
\end{frame}
\end{document}

正如您所见,如果您运行这段代码,长度 \prev 并不是“它应该是”的,最后我得到了一个大小为 100pt 的矩形,被一个大小为 90pt、然后是 60pt 和 40pt 的矩形覆盖(而不是一个 40pt 的矩形,然后是一个 60pt 的矩形,然后是一个 90pt 的矩形,还有一个 100pt 的矩形——总共 290pt)

有任何想法吗 ?

答案1

循环\foreach将每次迭代放在一个组中,因此所有局部更改都不会保留到下一次迭代。您需要\prev全局推进。

我认为这样\global\pgfmathaddtolength做不行,但\global\advance\prev\size可以按照您的示例所示,以简单的长度执行此操作。

您也可以\global\prev=\prev在循环代码的末尾使用它来使其成为\prev全局的。

相关内容