假设我有两个嵌套的 foreach 循环。
\foreach \i in {0, ..., 3}
{
\foreach[parse=true] \j in {0, ..., {1, 5, 7, 8}[\i]}
{
}
}
这会导致额外的“}”错误。我该如何实现?
我的目的是能够绘制一个二维的圆圈网格。但每行的长度可以按照预设的模式变化,即使用列表中指定的值。就像这样。
ooooo
ooo
ooooooo
ooo
答案1
PGFFor 的选项parse
有点挑剔,特别是如果最后一项紧跟在后面...
。通常最好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}