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 \DeclareDocumentCommand
zunächst nicht verwenden; der Befehl hat seine Verwendungszwecke, aber im Allgemeinen sollten Sie bevorzugen \NewDocumentCommand
.
Was Sie anscheinend brauchen, ist eine Funktion wie \NewNamedDocumentCommand
und 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}