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 parse
opciones 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, 8
directamente como entradas del bucle externo. Todavía es posible contar desde 0
usando la count
opció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}