Angenommen, ich habe zwei verschachtelte Foreach-Schleifen.
\foreach \i in {0, ..., 3}
{
\foreach[parse=true] \j in {0, ..., {1, 5, 7, 8}[\i]}
{
}
}
Dies führt zu einem zusätzlichen '}'-Fehler. Wie kann ich das erreichen?
Ich möchte ein zweidimensionales Raster aus Kreisen zeichnen können. Dabei kann die Länge jeder Reihe jedoch in einem voreingestellten Muster variieren, d. h. mit in einer Liste angegebenen Werten. So in etwa wie das hier.
ooooo
ooo
ooooooo
ooo
Antwort1
Die parse
Optionen von PGFFor sind etwas pingelig, insbesondere wenn das letzte Element direkt nach kommt . Normalerweise hilft es , davor ...
hinzuzufügen (manchmal reicht einfach, aber in diesem Fall nicht).0+
+
Ich habe eine weitere Doppelschleifenkonstruktion hinzugefügt, die kein Array verwendet, sondern die Liste 1, 5, 7, 8
direkt als Einträge der äußeren Schleife. Das Hochzählen 0
ist mit der count
Option PGFFor weiterhin möglich.
Vergessen Sie nicht: Wenn die Liste in einem Makro gespeichert ist, können Sie dieses Makro direkt als Liste verwenden:
\newcommand*\myList{1, 5, 7, 8}
\foreach \i in \myList {
…
}
Code
\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}
Bonus
\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}