讓 foreach 迴圈的上限是數組中的索引

讓 foreach 迴圈的上限是數組中的索引

假設我有兩個巢狀的 foreach 迴圈。

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

這會導致額外的“}”錯誤。我怎樣才能做到這一點?

我的目的是能夠繪製二維圓圈網格。但是,由於每行的長度能夠以預設模式變化,IE 具有清單中指定的值。像這樣的東西。

 ooooo
  ooo
ooooooo
  ooo 

答案1

PGFFor 的選項parse有點挑剔,特別是如果最後一項緊接在....它通常有助於0+在其前面添加(有時就+足夠了,但在這種情況下不行)。

我添加了另一個雙循環構造,它不使用數組,而是直接使用列表1, 5, 7, 8作為外部循環的條目。0透過使用 PGFFor 選項,仍然可以從 開始計數count

不要忘記,如果清單儲存在巨集中,您可以直接使用該巨集作為清單:

\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}

輸出

在此輸入影像描述

相關內容