Schreiben Sie ein Makro, um einen neuen Befehl zu definieren und ihn lokal aufzurufen

Schreiben Sie ein Makro, um einen neuen Befehl zu definieren und ihn lokal aufzurufen

Ich würde ein Makro schreiben \defineThisCommand, das einen neuen Befehl definiert \TheCommandund 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

Meinst du so etwas:

\documentclass[]{article}

\newcommand\defineanduse[2]
  {%
    \newcommand#1{#2}%
    #1%
  }

\begin{document}

\defineanduse\mycmd{abc}

\defineanduse\myothercmd{def}

\mycmd\myothercmd

\end{document}

Bildbeschreibung hier eingeben

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:

  1. der Steuersequenz eine Bedeutung zugewiesen wurde, oder
  2. die Steuersequenz ist undefiniert.

Im ersten Fall verwendet TeX die Bedeutung, die dem Kontext angemessen sein sollte: Wenn es \foosich um ein Makro handelt, wird es erweitert, wenn es sich um ein \chardefToken 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, \defineOtherCommandwenn 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.

verwandte Informationen