목록 목록을 반복합니까?

목록 목록을 반복합니까?

후속 조치etoolbox를 사용하여 사용자 정의된 요소 목록 특히 두 번째 해결책은 다음과 같습니다. 해당 목록을 반복하는 편리한 방법이 있습니까?

예:

\documentclass{article}

\usepackage{tikz}

\ExplSyntaxOn
\NewDocumentCommand{\newList}{m}
 {
  \seq_new:c { l_kees_list_#1_seq }
 }
\NewDocumentCommand{\addToList}{mm}
 {
  \seq_put_right:cn { l_kees_list_#1_seq } { #2 }
 }
\NewDocumentCommand{\getFromList}{mm}
 {
  \seq_item:cn { l_kees_list_#1_seq } { #2 }
 }
\NewDocumentCommand{\getListLength}{m}
 {
   \seq_count:c { l_kees_list_#1_seq } 
 }
\NewDocumentCommand{\getList}{m}
 {
   \seq_use:cn { l_kees_list_#1_seq }  { , }
 } 
\ExplSyntaxOff



\begin{document}


\newList{listA}
\newList{listB}
\addToList{listA}{one}
\addToList{listA}{two}
\addToList{listA}{three}
\addToList{listB}{oneinB}
\addToList{listB}{anoterinB}

% this works, but is cumbersome: 
\foreach \n in {1,...,\getListLength{listA}} {n: \n, \getFromList{listA}{\n} }
\foreach \n in {1,...,\getListLength{listB}} {n: \n, \getFromList{listB}{\n} }

% not sure why this does not expand properly? 
\foreach \i in {\getList{ListA}} {i: \i }

\end{document}

오류 메시지가 표시됩니다.

! Use of \??? doesn't match its definition.
<argument> \???
                 ! LaTeX Error: Erroneous variable \l_kees_list_ListA_seq used!
l.46 \foreach \i in {\getList{ListA}} {i: \i }

(foreach가 필요한 이유는 이 루프가 결국 tikzpicture로 들어가야 하기 때문입니다)

감사해요!

답변1

.\foreach

여기에는 두 개의 인수가 필요합니다. 첫 번째 인수는 목록 이름이고, 두 번째 인수는 현재 주기와 항목을 \listLoop나타내는 템플릿입니다 .#1#2

\documentclass{article}

\usepackage{tikz}

\ExplSyntaxOn

%%% Lists
\NewDocumentCommand{\newList}{m}
 {
  \seq_new:c { l_kees_list_#1_seq }
 }
\NewDocumentCommand{\addToList}{mm}
 {
  \seq_put_right:cn { l_kees_list_#1_seq } { #2 }
 }
\NewDocumentCommand{\getFromList}{mm}
 {
  \seq_item:cn { l_kees_list_#1_seq } { #2 }
 }
\NewDocumentCommand{\getListLength}{m}
 {
   \seq_count:c { l_kees_list_#1_seq }
 }
\NewDocumentCommand{\getList}{m}
 {
   \seq_use:cn { l_kees_list_#1_seq }  { , }
 }

%%% Loops
\NewDocumentCommand{\loopList}{m +m}
 {
  \seq_map_indexed_inline:cn { l_kees_list_#1_seq } { #2 }
 }
\cs_generate_variant:Nn \seq_map_indexed_inline:Nn { c }
\ExplSyntaxOff



\begin{document}


\newList{listA}
\newList{listB}
\addToList{listA}{one}
\addToList{listA}{two}
\addToList{listA}{three}
\addToList{listB}{oneinB}
\addToList{listB}{anoterinB}

% this works, but is cumbersome:
\foreach \n in {1,...,\getListLength{listA}} {n: \n, \getFromList{listA}{\n} }

%\foreach \n in {1,...,\getListLength{listB}} {n: \n, \getFromList{listB}{\n} }

% this is better
\loopList{listA}{n: #1, #2 }

\end{document}

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

관련 정보