foreach 루프의 상한이 배열의 인덱스가 되도록 가짐

foreach 루프의 상한이 배열의 인덱스가 되도록 가짐

두 개의 중첩된 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}

산출

여기에 이미지 설명을 입력하세요

관련 정보