foreach 대신 forloop로 반복

foreach 대신 forloop로 반복

나는 이것을 가지고있다{C/4/a/n,D/4/b/n,E/4/c/n}

이것이 foreach를 사용하여 반복하는 방법입니다.

\foreach \x\y\w\z in {C/4/a/n,D/4/b/n,E/4/c/n} {
        \x - \y - \w - \z
    }

하지만 forloop를 사용하여 수행해야 합니다. x,y,w,z를 분리할 수 있고 expl3이나 이와 유사한 패키지를 뒷면에 설치해야 하는 패키지를 사용하지 않는 것이 중요합니다.

답변1

다음은 두 가지 다른 모드로 목록을 반복하는 함수를 정의합니다. 첫 번째는 간단한 쉼표로 구분된 값 목록이며 #1현재 목록 항목을 나타냅니다(단순한 \clist_map_inline:n).

두 번째 모드는 하위 목록에 대한 구분 기호를 선택적 인수로 사용하고, 주어진 경우 를 사용하여 하위 멤버에 액세스할 수 있고 를 사용 #1{<n>}하여 전체 목록에 액세스할 수 있습니다 #2. 모든 것이 그룹 없이 작동하므로( 와는 달리 \foreach) 여러분에게 도움이 되기를 바랍니다.

\documentclass{article}

\ExplSyntaxOn
\int_new:N \g__arturo_nested_level_int
\NewDocumentCommand \ForEach { +o +m +m }
  {
    \IfNoValueTF {#1}
      { \clist_map_inline:nn {#2} {#3} }
      { \__arturo_foreach:nnn {#1} {#2} {#3} }
  }
\cs_new_protected:Npn \__arturo_foreach:nnn #1#2#3
  {
    \int_gincr:N \g__arturo_nested_level_int
    \__arturo_foreach_aux:ccnnn
      { __arturo_foreach_code_ \int_use:N \g__arturo_nested_level_int :nn }
      { l__arturo_foreach_items_ \int_use:N \g__arturo_nested_level_int _seq }
      {#1} {#2} {#3}
    \int_gdecr:N \g__arturo_nested_level_int
  }
\cs_new_protected:Npn \__arturo_foreach_aux:NNnnn #1#2#3#4#5
  {
    \cs_set:Npn #1 ##1 ##2 {#5}
    \seq_clear_new:N #2
    \clist_map_inline:nn {#4}
      {
        \seq_set_split:Nnn #2 {#3} {##1}
        #1 { \seq_item:Nn #2 } {##1}
      }
  }
\cs_generate_variant:Nn \__arturo_foreach_aux:NNnnn { cc }
\ExplSyntaxOff

\begin{document}
\ForEach{a,b,c,d}{#1\par}

\ForEach[/]{C/4/a/n,D/4/b/n,E/4/c/n}{#1{1} - #1{2} - #1{3} - #1{4} (from #2)\par}
\end{document}

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

답변2

다음은 TeX 솔루션입니다. 정확히 무엇을 하려는지 이해가 안 되지만 여기서부터 시작해 보세요.

\bgroup
\def\for#1\endfor{\def\body{#1}\iterate}
\def\iterate{\body\let\next=\iterate\else\let\next=\relax\fi\next}
\newcount\n
\n=0
% Example usage
\for
   \advance\n by1
     \number\n,   
   \ifnum\n<30
\endfor
\egroup

\bye

재귀 및 if 문은 프로그래밍 언어 Turing을 완성합니다.

관련 정보