LaTeX 3의 상위 인수에 액세스할 수 있는 인수로 코드를 사용하는 매크로

LaTeX 3의 상위 인수에 액세스할 수 있는 인수로 코드를 사용하는 매크로

Latex 3에서는 내부적으로 매크로를 정의할 수 있는 인수 코드로 사용되는 매크로를 작성하고 싶습니다. 원본의 인수에 액세스하기 위해 코드가 전달되도록 허용하는 방식으로 이를 수행하려면 어떻게 해야 합니까? 예를 들어 다음과 같은 작업을 수행하고 싶습니다.

\documentclass{article}
\usepackage{xparse, expl3}

\begin{document}

\DeclareDocumentCommand{\CodeMacro}{m +m}
{
    Do Something

    #2
}


\CodeMacro{Test}
{
    \DeclareDocumentCommand\csname Testing#1\endcsname{m}
    {
        #1-##1
    }
}

\end{document}

나는 이것이 다음으로 확장되기를 원합니다.

Do Something

\DeclareDocumentCommand\csname TestingTest\endcsname{m}
{
    Test-#1
}    

답변1

\DeclareDocumentCommand처음부터 사용하면 안 됩니다 . 명령에는 용도가 있지만 일반적으로 \NewDocumentCommand.

당신에게 필요한 것은 와 같은 기능 \NewNamedDocumentCommand과 몇 가지 더러운 트릭입니다.

\documentclass{article}
\usepackage{expl3,xparse}

\ExplSyntaxOn % or spaces would count
\NewDocumentCommand{\CodeMacro}{m +m}
 {
   Do Something
   \nate_do:nn {#1}{#2}
 }

\NewDocumentCommand{\NewNamedDocumentCommand}{mmm}
 {
  \exp_args:Nc \NewDocumentCommand{#1}{#2}{#3}
 }

\cs_new_protected:Nn \nate_do:nn
 {
  \cs_set_protected:Nn \__nate_do:n { #2 }
  \__nate_do:n { #1 }
 }
\ExplSyntaxOff

\begin{document}

\CodeMacro{Test}{%
  \NewNamedDocumentCommand{Testing#1}{m}{%
        #1-##1%
  }%
}

\TestingTest{X}

\end{document}

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

관련 정보