두 개의 중첩된 foreach 루프가 있다고 가정해 보겠습니다.
\foreach \i in {0, ..., 3}
{
\foreach[parse=true] \j in {0, ..., {1, 5, 7, 8}[\i]}
{
}
}
이로 인해 추가 '}' 오류가 발생합니다. 어떻게 이것을 달성할 수 있나요?
내 의도는 원의 2D 그리드를 그릴 수 있는 것입니다. 그러나 각 행의 길이는 사전 설정된 패턴에 따라 달라질 수 있으며 IE는 목록에 지정된 값을 사용합니다. 이 같은.
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}