Hacer que el límite superior de un bucle foreach sea un índice de una matriz

Hacer que el límite superior de un bucle foreach sea un índice de una matriz

Digamos que tengo dos bucles foreach anidados.

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

Esto da como resultado un error '}' adicional. ¿Cómo podría lograr esto?

Mi intención es poder dibujar una cuadrícula de círculos en 2D. Pero la longitud de cada fila puede variar en un patrón preestablecido, es decir, con valores especificados en una lista. Algo como esto.

 ooooo
  ooo
ooooooo
  ooo 

Respuesta1

Las parseopciones de PGFFor son un poco complicadas, especialmente si el último elemento viene directamente después .... Por lo general, ayuda agregar 0+delante (a veces solo +es suficiente, pero no en este caso).

Agregué otra construcción de doble bucle que no usa una matriz, sino que usa la lista 1, 5, 7, 8directamente como entradas del bucle externo. Todavía es posible contar desde 0usando la countopción de PGFFor.

No olvides que si la lista está almacenada en una macro, puedes usar esa macro directamente como lista:

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

Código

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

Prima

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

Producción

ingrese la descripción de la imagen aquí

información relacionada