Makros, die Code als Argument verwenden, der in LaTeX 3 auf übergeordnete Argumente zugreifen kann

Makros, die Code als Argument verwenden, der in LaTeX 3 auf übergeordnete Argumente zugreifen kann

In Latex 3 möchte ich ein Makro schreiben, das als Argument Code verwendet, der intern ein Makro definieren kann. Wie mache ich das so, dass der übergebene Code auf Argumente des Originals zugreifen kann? Ich möchte beispielsweise in der Lage sein, etwas wie das Folgende zu tun.

\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}

Ich möchte dies erweitern auf

Do Something

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

Antwort1

Sie sollten \DeclareDocumentCommandzunächst nicht verwenden; der Befehl hat seine Verwendungszwecke, aber im Allgemeinen sollten Sie bevorzugen \NewDocumentCommand.

Was Sie anscheinend brauchen, ist eine Funktion wie \NewNamedDocumentCommandund ein paar schmutzige Tricks.

\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}

Bildbeschreibung hier eingeben

verwandte Informationen