쉼표로 구분된 선택적 인수가 있는 환경

쉼표로 구분된 선택적 인수가 있는 환경

를 사용하면 xparse어떻게 이와 같은 작업을 수행할 수 있나요?

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\NewDocumentEnvironment{ anenvironment }{ >{\SplitArgument{1}{,}}o }{
  \begin{ auxanenvironment }[#1]
}{
  \end{ auxanenvironment }
}

\NewDocumentEnvironment{ auxanenvironment }{ O{}o }{
  Do~something~with~#1\IfValueTF{ #2 }{ ,~and~something~else~with~#2. }{ . }
}{}

\ExplSyntaxOff
\begin{document}
\begin{anenvironment}[this argument, this other argument]
\end{anenvironment}

\begin{anenvironment}[this argument]
\end{anenvironment}
\end{document}

답변1

보조 환경에서도 가능하지만 최선의 방법은 아니라고 생각합니다.

선택적 인수가 나타나지 않는 경우도 처리해야 합니다. 선택적 인수이지 않습니까?

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentEnvironment{anenvironment}{ >{\SplitArgument{1}{,}}o }
 {
  \IfValueT{#1}{ \noibe_anenvironment_arg:nn #1 }
  %<initial code for the environment>
  \par Start\par
 }
 {
  %<final code for the environment>
  End\par
 }

\cs_new_protected:Nn \noibe_anenvironment_arg:nn
 {
  \tl_if_novalue:nF { #1 }
   {
    Do~something~with~#1
    \tl_if_novalue:nTF { #2 }
     {.}
     {
      ,~and~something~else~with~#2.
     }
   }
}

\ExplSyntaxOff

\begin{document}

\begin{anenvironment}[this argument, this other argument]
\end{anenvironment}

\medskip

\begin{anenvironment}[this argument]
\end{anenvironment}

\medskip

\begin{anenvironment}
\end{anenvironment}

\end{document}

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

실제 사용 사례를 알지 못하면 덜 일반적인 것이 어렵습니다. 인수가 옵션 설정에 관한 것이라면 키-값 인터페이스를 고려하는 것이 좋습니다.

답변2

완전히 다른 접근 방식.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{listofitems}
\newenvironment{anenvironment}[1][\relax]{%
  \ifx\relax#1\relax\else
    \readlist*\arglist{ #1}%
    \foreachitem\x\in\arglist[]{%
      Doing something with \detokenize\expandafter{\x}.\x\par
    }%
  \fi\par
}{%
  \par Done doing something.\par\medskip
}
\begin{document}
\begin{anenvironment}
This is a test.
\end{anenvironment}
\begin{anenvironment}[\itshape]
This is a test.
\end{anenvironment}
\begin{anenvironment}[\itshape,\bfseries, \tiny]
This is a test.
\end{anenvironment}
\end{document}

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

답변3

auxanenvironment이것이 올바른 방법인지는 확실하지 않지만 6행에서 인수 주위의 대괄호를 제거하고 의 인수를 필수로 변경하면 문제가 해결된다는 것을 알게 되었습니다 .

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\NewDocumentEnvironment{ anenvironment }{ >{\SplitArgument{1}{,}}o }{
  \begin{ auxanenvironment }#1
}{
  \end{ auxanenvironment }
}

\NewDocumentEnvironment{ auxanenvironment }{ mm }{
  Do~something~with~#1\IfValueTF{ #2 }{ ,~and~something~else~with~#2. }{ . }
}{}

\ExplSyntaxOff
\begin{document}
\begin{anenvironment}[this argument, this other argument]
\end{anenvironment}

\begin{anenvironment}[this argument]
\end{anenvironment}
\end{document}

관련 정보