ネストされた foreach ループが 2 つあるとします。
\foreach \i in {0, ..., 3}
{
\foreach[parse=true] \j in {0, ..., {1, 5, 7, 8}[\i]}
{
}
}
これにより、余分な '}' エラーが発生します。どうすればこれを実現できますか?
私の意図は、2D グリッドの円を描画できるようにすることです。ただし、各行の長さは、事前設定されたパターンで変化させることができます。つまり、リストで指定された値です。次のようになります。
ooooo
ooo
ooooooo
ooo
答え1
PGFFor のオプションparse
は、特に最後の項目が の直後に来る場合、少し扱いにくいです。通常は、 の前に...
を追加すると役立ちます( だけで十分な場合もありますが、この場合はそうではありません)。0+
+
配列を使用せず、代わりにリストを1, 5, 7, 8
外側のループのエントリとして直接使用する別の二重ループ構造を追加しました。PGFFor のオプションを使用すると、カウントアップは0
引き続き可能ですcount
。
リストがマクロに保存されている場合は、そのマクロをリストとして直接使用できることを忘れないでください。
\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}