Die Obergrenze einer Foreach-Schleife muss ein Index aus einem Array sein.

Die Obergrenze einer Foreach-Schleife muss ein Index aus einem Array sein.

Angenommen, ich habe zwei verschachtelte Foreach-Schleifen.

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

Dies führt zu einem zusätzlichen '}'-Fehler. Wie kann ich das erreichen?

Ich möchte ein zweidimensionales Raster aus Kreisen zeichnen können. Dabei kann die Länge jeder Reihe jedoch in einem voreingestellten Muster variieren, d. h. mit in einer Liste angegebenen Werten. So in etwa wie das hier.

 ooooo
  ooo
ooooooo
  ooo 

Antwort1

Die parseOptionen von PGFFor sind etwas pingelig, insbesondere wenn das letzte Element direkt nach kommt . Normalerweise hilft es , davor ...hinzuzufügen (manchmal reicht einfach, aber in diesem Fall nicht).0++

Ich habe eine weitere Doppelschleifenkonstruktion hinzugefügt, die kein Array verwendet, sondern die Liste 1, 5, 7, 8direkt als Einträge der äußeren Schleife. Das Hochzählen 0ist mit der countOption PGFFor weiterhin möglich.

Vergessen Sie nicht: Wenn die Liste in einem Makro gespeichert ist, können Sie dieses Makro direkt als Liste verwenden:

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

Code

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

Bonus

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

Ausgabe

Bildbeschreibung hier eingeben

verwandte Informationen