Variablenbereich in Newcommand

Variablenbereich in Newcommand

Betrachten Sie dieses Beispiel:

\documentclass{article}
\begin{document}
\def\something{something}
\something

    {
        \def\something{another thing}

      \something
    }

    \something
\end{document}

Aus der Ausgabe ist ersichtlich, dass es zwei Variablen gibt, die somethingjeweils in ihrem eigenen Bereich liegen:

Bildbeschreibung hier eingeben

Nun platziere ich eine Variable in einem newcommand:

\documentclass{article}
\def\something{something}
\newcommand{\dosomething}{
  invoking ``dosomething''
  \def\something{another thing}

  \something
}
\begin{document}
\something

\dosomething

\something
\end{document}

Aus der Ausgabe ist ersichtlich, dass durch den Aufruf newcommanddie vorherige Definition der Variablen geändert wurde:

Bildbeschreibung hier eingeben

Dies kann insbesondere bei Bibliotheken mit Hunderten von Variablen zu undurchsichtigen Fehlern führen. Gibt es eine Möglichkeit, meine Variablen vor Änderungen durch newcommands zu schützen? Was ist der beste Ansatz?

Antwort1

TeX bietet einen Mechanismus zur Makroerweiterung; das Makro wird durch den Ersatztext ersetzt. Daher mit Ihrer aktuellen Definition

\newcommand{\dosomething}{
  invoking ``dosomething''
  \def\something{another thing}

  \something
}

das Dokument

\begin{document}
\something

\dosomething

\something
\end{document}

ist praktisch gleichbedeutend mit

\begin{document}
\something

invoking ``dosomething''
\def\something{another thing}

\something

\something
\end{document}

(plus ein paar Leerzeichen am Ende, bei denen Sie etwas nachlässig waren :-))

Wenn Sie Änderungen an \somethingauf die Ausführung von beschränken möchten \dosomething, müssen Sie eine Gruppierungsebene einschließen, entweder mit expliziten Klammern {...}oder (besser lesbar) mit den Primitiven \begingroup/\endgroup

\newcommand{\dosomething}{% <-- don't forget this
  \begingroup
  invoking ``dosomething''%
  \def\something{another thing}%

  \something
  \endgroup
}

verwandte Informationen