Допустим, у меня есть два вложенных цикла foreach.
\foreach \i in {0, ..., 3}
{
\foreach[parse=true] \j in {0, ..., {1, 5, 7, 8}[\i]}
{
}
}
Это приводит к дополнительной ошибке '}'. Как этого добиться?
Моя цель — нарисовать 2d сетку кругов. Но с длиной каждой строки, которая может изменяться по заданному шаблону, т. е. со значениями, указанными в списке. Что-то вроде этого.
ooooo
ooo
ooooooo
ooo
решение1
Параметры parse
PGFFor немного привередливы, особенно если последний элемент идет сразу после ...
. Обычно помогает добавление 0+
перед ним (иногда достаточно просто, +
но не в этом случае).
Я добавил еще одну конструкцию двойного цикла, которая не использует массив, а вместо этого использует список 1, 5, 7, 8
напрямую как записи внешнего цикла. Подсчет вверх от 0
все еще возможен с помощью count
опции PGFFor.
Не забывайте, что если список сохранен в макросе, вы можете использовать этот макрос непосредственно в качестве списка:
\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}