
Ich würde ein Makro schreiben \defineThisCommand
, das einen neuen Befehl definiert \TheCommand
und ihn dann lokal aufruft. Der Code muss ungefähr so aussehen:
\defineThisCommand{}{
\newcommand \ThisCommand{
#1
}
\ThisCommand
}
\begin{document}
\defineTopicOne{Some text printed}
\defineTopicTwo{and this too}
\end{document}
Erzeugen Sie am Ende die Ausgabe
Some text printed
and this too
Können Sie mir bitte eine Möglichkeit zur Lösung dieses Problems vorschlagen?
Antwort1
Antwort2
Wenn TeX eine Steuersequenz findet \foo
, müssen zunächst zwei Fälle unterschieden werden: Entweder führt TeX eine Makroerweiterung durch oder nicht. Der letztere Fall ist in Ihrer Situation nicht von Belang, daher schauen wir uns an, was im ersteren Fall passiert. Die Fälle sind:
- der Steuersequenz eine Bedeutung zugewiesen wurde, oder
- die Steuersequenz ist undefiniert.
Im ersten Fall verwendet TeX die Bedeutung, die dem Kontext angemessen sein sollte: Wenn es \foo
sich um ein Makro handelt, wird es erweitert, wenn es sich um ein \chardef
Token handelt, wird das entsprechende Zeichen gedruckt und so weiter.
Im zweiten Fall wird TeX angehalten, eine Fehlermeldung ausgegeben undignorierendas undefinierte Token.
Sie können also nicht tun, was Sie möchten, es sei denn, Sie haben zuvor eine Reihe von Makros definiert
\newcommand\defineThisCommand[1]{\newcommand\ThisCommand{#1}\ThisCommand}
für jeden lokalen Befehl, den Sie benötigen. Dies widerspricht offensichtlich Ihrer Absicht: Sie können es nicht haben, \defineOtherCommand
wenn Sie es nicht zuvor definiert haben.
Die zu verwendende Strategie besteht darin, ein generisches Makro mitzweiArgumente:
\newcommand\define[2]{%
\newcommand#1{#2}% define the local command
#2% and also use it now
}
was Ihnen erlaubt zu sagen
\define\ThisCommand{whatever}
zu tun, was Sie wollen.