개행으로 구분된 목록을 반복합니다.

개행으로 구분된 목록을 반복합니다.

내 목적으로는 각 줄에 하나의 요소가 있는 목록을 갖는 것이 편리합니다(ASCII로 구분 \n). 나는 그러한 목록을 반복하고 싶습니다. 이 같은:

\begin{itemize}

\foreachperline{
foo
   bar, baz
abcdef \emph{test}
}{\item TEST#1END}

\end{itemize}

이는 다음을 생성합니다.

  • TESTfooEND

  • 테스트 바, bazEND

  • TESTabcdef시험

나는 첫 번째 줄과 마지막 줄 바꿈을 무시하고 위와 똑같이 작업하는 것을 선호합니다. \foreachperline조금 지저분해지면 다음도 괜찮을 것입니다.

\foreachperline{foo
   bar, baz
abcdef \emph{test}}{\item TEST#1END}

다음과 같이 줄의 끝을 명시적으로 표시하는 것도 허용됩니다(옵션 2보다 선호되지만 옵션 1보다 바람직하지 않음).

\foreachperline{
foo\\
   bar, baz\\
abcdef \emph{test}\\
}{\item TEST#1END}

에는 공백이 없지만 TEST#1END줄의 내용에 따라 출력에는 공백이 있습니다(줄 참조 bar).

#1자리표시자로 반드시 사용해야 하는 것은 아닙니다 . 이런 것도 괜찮을 것 같아요.

\foreachperline{
foo
bar, baz
abcdef \emph{test}
}{\item TEST\placeholder{}END}

구문이 단일 매크로일 필요는 없습니다. 이런 것도 괜찮을 것 같아요.

\forthingy \i \in {...}{\item TEST\i{}END}

\foreachperline, 또는 기능적으로 동등한 것을 어떻게 작성합니까 ?

답변1

줄 바꿈을 구분 기호로 사용하여 자신만의 발을 딛게 될 것입니다. 대부분의 편집자는 사용자 입력을 구성하는 방법에 대한 자신만의 아이디어를 가지고 있습니다.

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\foreachperline}{m}
 {
  \cs_set_protected:Nn \__spraff_per_line_do:n { #1 }
  \group_begin:
  \char_set_catcode_other:n { 13 }
  \char_set_catcode_active:n { 32 }
  \char_set_active_eq:nN { 32 } \c_space_token
  \__spraff_per_line_go:n
 }

\cs_new_protected:Nn \__spraff_per_line_go:n
 {
  \seq_set_split:Nfn \l__spraff_per_line_input_seq { \char_generate:nn { 13 } { 12 } } { #1 }
  \seq_pop_left:NN \l__spraff_per_line_input_seq \l_tmpa_tl
  \seq_pop_right:NN \l__spraff_per_line_input_seq \l_tmpa_tl
  \seq_map_function:NN \l__spraff_per_line_input_seq \__spraff_per_line_do:n
  \group_end:
 }

\seq_new:N \l__spraff_per_line_input_seq
\cs_generate_variant:Nn \seq_set_split:Nnn { Nf }
\ExplSyntaxOff

\begin{document}

\begin{itemize}

\foreachperline{\item TEST#1END}{
foo
   bar, baz
abcdef \emph{test}
}

\end{itemize}

\end{document}

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

세 개의 공백을 하나로 압축하지 않습니까? 글쎄, TeX은 줄 시작 부분의 공백을 무시하므로 공백을 얻지 못하거나 평소처럼 처리할 수 없다는 것을 알고 있습니다.

아, 이것을 다른 명령에 대한 인수로 제공하려고 시도하지 마십시오. 특히 중첩이 없습니다.

관련 정보