将 foreach 循环的上限设为数组中的索引

将 foreach 循环的上限设为数组中的索引

假设我有两个嵌套的 foreach 循环。

\foreach \i in {0, ..., 3}
{
    \foreach[parse=true] \j in {0, ..., {1, 5, 7, 8}[\i]}
    {
    }
}

这会导致额外的“}”错误。我该如何实现?

我的目的是能够绘制一个二维的圆圈网格。但每行的长度可以按照预设的模式变化,即使用列表中指定的值。就像这样。

 ooooo
  ooo
ooooooo
  ooo 

答案1

PGFFor 的选项parse有点挑剔,特别是如果最后一项紧跟在后面...。通常最好0+在前面添加(有时这样就+足够了,但在这种情况下不行)。

我添加了另一个双循环构造,它不使用数组,而是直接使用列表1, 5, 7, 8作为外循环的条目。0使用countPGFFor 选项仍然可以进行向上计数。

不要忘记,如果列表存储在宏中,您可以直接将该宏用作列表:

\newcommand*\myList{1, 5, 7, 8}
\foreach \i in \myList {
}

代码

\documentclass[varwidth]{standalone}
%\documentclass{article}
\usepackage{pgffor}
\begin{document}
Loops:
\foreach \i in {0, ..., 3}{
  \par $ i = \i $:%
  \foreach[parse=true] \j in {0, ..., 0+{1, 5, 7, 8}[\i]}{
    $j = \j$,%
  }
}
\vspace{1em}
\foreach[count=\cnt from 0] \i in {1, 5, 7, 8}{
  \par \cnt. item: $ i = \i $:%
  \foreach \j in {0, ..., \i}{
    $j = \j$,%
  }
}
\end{document}

奖金

\documentclass[tikz]{standalone}
\begin{document}
\tikz[y=-1cm, radius=.4]\draw 
  foreach[count=\y from 0] \i in {1, 5, 7, 8}{
    [shift=(left:{(\i-1)/2})]
    foreach \x in {0, ..., \i}{
      (\x, \y) circle[] } };
\end{document}

输出

在此处输入图片描述

相关内容