LaTeX는 표 형식 환경에서 반복할 때 오류를 발생시킵니다.

LaTeX는 표 형식 환경에서 반복할 때 오류를 발생시킵니다.
  • 사용된 패키지: pgffor
  • 패키지에서 사용되는 함수: foreach
  • 컴파일: 라텍스

최소화된 문서:

\documentclass[a4paper]{article}

\usepackage{pgffor}

\begin{document}
\def\colourNames{red, green, blue}

\begin{tabular}{cc}
  \foreach \n in \colourNames {
    \foreach [expand list=true] \m in {\colourNames} { \n & \m \\ }
  }
\end{tabular}

\end{document}

내가 받은 오류:

! Extra }, or forgotten \endgroup.
<template> \unskip \hfil }
                          \hskip \tabcolsep \endtemplate 
l.11   }
        
? 
! Emergency stop.
<template> \unskip \hfil }
                          \hskip \tabcolsep \endtemplate 
l.11   }

추가해도 \endgroup도움이 되지 않습니다. "불쾌한"을 삭제하면 }이전 두 줄의 중괄호가 닫히므로 도움이 되지 않습니다.

\tabular환경을 환경으로 바꾸고 구문 \itemize에 맞게 필요한 변경을 수행 하면 \item코드는 정상입니다.

[...]
\begin{itemize}
  \foreach \n in \colourNames {
    \foreach [expand list=true] \m in {\colourNames} { \item \n, \m }
  }
\end{itemize}
[...]

아마도 특수 표 문자 &및/또는 //문제의 원인일 것입니다. 하지만 그렇다면 컴파일이 작동하도록 어떻게 이스케이프할 수 있습니까? 옵션과 그 장단점에 대한 심층적인 설명과 함께 문제를 해결하는 가장 우아한 방법을 보여주는 좋은 문서가 있습니까?


메모:아래의 "업데이트" 섹션에는 제가 받은 의견과 답변에 대한 요약과 추가 정보가 있습니다. 나는 받은 정보와 리드를 여전히 적극적으로 처리하고 있습니다. 완료되면 David Carlisle이 권장하는 대로 "업데이트" 섹션을 정리하고 완성하여 답변으로 이동하겠습니다.

업데이트 0: 지금까지 내가 유용하다고 생각한 것 :

  1. David Carlisle의 의견은 오류의 원인을 이해하는 데 도움이 되었습니다.
  2. Qrrbrbirlbel과 pascal974는 모두 LaTeX3의 솔루션을 가리킵니다(튜토리얼에 대한 참조가 특히 유용할 것입니다).
  3. Steven B. Segletes의 답변은 TeX 토큰을 사용하여 더 간단한 솔루션을 제공하는 것처럼 보이지만 이를 이해하려면 시간과 연구가 필요합니다.
  4. 전체적으로: 지금까지 제안된 두 솔루션 모두 좋아 보이고 추가 연구가 필요하므로 원래 문제를 해결하기 위해 어떤 솔루션을 선택할지 아직 알 수 없습니다.

업데이트 1: TeX 토큰에 익숙해지는 데 도움이 되는 좋은 시리즈:

  1. 새로운 기사 시리즈: TeX 토큰 및 관련 개념 - 그런데 왜(그리고 어떻게)?
  2. "TeX 토큰"이란 무엇입니까?
  3. TeX 토큰 목록이란 무엇입니까?

위의 시리즈를 읽는 동안 유용하다고 생각한 추가 참고 자료는 다음과 같습니다.

  1. 토큰 확장의 경우:\newtoks와 토큰 목록에 관한 수수께끼

업데이트 2: 세 번째 대답(OpTeX 사용)은 가장 간단하지만 (LaTeX 관점에서) 평행 우주로 연결됩니다. LaTeX 기능을 이제 막 시작하고 사용할 계획이 없는 사람들에게 매우 유용합니다.OpTeX 패키지 문서훌륭하다.

업데이트 3: 결과적으로 LaTeX3 솔루션은 최소한의 예제가 추출된 원래 문제를 해결하기 위해 확장하기가 가장 쉽고 빠릅니다. 테이블에 더 쉽게 추가 사용자 정의 함수를 허용합니다. 이것이 바로 녹색 진드기가 거기로 가는 이유입니다.

업데이트 4: 안타깝게도 새 답변을 추가할 수 있는 기회가 차단되었습니다. 연결된 etoolbox솔루션은 다음과 같은 문제에 시달립니다.TeX 토큰해결책. 내부에 사용자 정의 명령을 추가하면 종료될 수 있습니다. 따라서 여전히 가장 방탄 솔루션인 것으로 보이는 것은 LaTeX3 옵션이다. (어쨌든 참고로:etoolbox 패키지 문서)

답변1

expl3을 사용하면 설명서 interface3 usrguide와 튜토리얼이 제공됩니다 .https://www.alanshawn.com/latex3-tutorial/

\documentclass[a4paper]{article}
%https://tex.stackexchange.com/questions/706767/latex-gives-error-when-looping-in-tabular-environment

\ExplSyntaxOn
%\<scope>_<module>_<description>_<type>
\seq_new:N \l_Tibor_listcolor_seq
\tl_new:N \l_Tibor_rowtab_tl
\NewDocumentCommand{\mytab}{ m }
  {
    \tl_clear:N \l_Tibor_rowtab_tl
    \seq_set_from_clist:NN \l_Tibor_listcolor_seq #1
    \seq_map_inline:Nn \l_Tibor_listcolor_seq  
      {
        \seq_map_inline:Nn \l_Tibor_listcolor_seq 
          {
            \tl_put_right:Nn \l_Tibor_rowtab_tl {##1 & ####1\\}
          }
      }
      \l_Tibor_rowtab_tl 
  }

\ExplSyntaxOff
\begin{document}
\def\colourNames{red, green, blue}

\begin{tabular}{| c | c |}
  \mytab{\colourNames}
\end{tabular}
\end{document}

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

답변2

루프 를 사용하여 \foreach토큰을 수집합니다. 그런 다음 tabular.

\documentclass[a4paper]{article}

\usepackage{pgffor}
\newtoks\mytoks
\newcommand\addtomytoks[1]{\global\mytoks\expandafter{\the\mytoks#1}}
\newcommand\xaddtomytoks[1]{\expandafter\addtomytoks\expandafter{#1}}
\begin{document}
\def\colourNames{red, green, blue}

\mytoks{}%
\foreach \n in \colourNames {%
  \foreach [expand list=true] \m in {\colourNames} { %
  \xaddtomytoks{\n &}\xaddtomytoks{\m \\} }%
}%
\begin{tabular}{cc}
  \the\mytoks
\end{tabular}

\end{document}

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

답변3

OpTeX를 사용할 때 \foreach내부 에는 문제가 없습니다 \table.

\def\colourNames{red, green, blue}
\table{cc}{
   \ea\foreach \colourNames, \do#1, {%
      \ea\foreach \colourNames, \do##1, {#1 & ##1 \cr}
   }
}
\bye

관련 정보