Definieren Sie einen Befehl mit einer ungeraden Anzahl von Klammern

Definieren Sie einen Befehl mit einer ungeraden Anzahl von Klammern

In meinem Code wechsle ich in den 2-Spalten-Modus und gebe Folgendes ein:

\twocolumn[{

Ich versuche, diesen Code zu vereinfachen, indem ich einen neuen Befehl erstelle:

\renewcommand{\twocolumn}{\twocolumn[{}

Ist es möglich, in diesen neuen Befehl eine eckige Klammer und eine geschweifte Klammer einzufügen? Dabei treten bei mir viele Fehlermeldungen auf.

Antwort1

Der Ablauf

\renewcommand{\twocolumn}{\twocolumn[{}

würde einen Befehl definieren \twocolumn, der sich unter anderem selbst aufruft. Sie würden eine Art rekursive Schleife erhalten, bei der die Kompilierung mit einer Fehlermeldung TeX capacity exceededoder ähnlichem beendet werden könnte, wenn sich während der Rekursion zu viele öffnende Klammern und geschweifte Klammern angesammelt haben.

Außerdem handelt es sich hierbei \twocolumnum ein Makro, das in Makropaketen usw. verwendet werden kann. Eine Neudefinition kann zu Problemen mit (Paket-)Code führen, der auf die ursprüngliche Bedeutung von angewiesen ist \twocolumn.

\twocolumn Möglicherweise wäre die Definition eines eigenen Makros zum Aufruf eine Option:

\makeatletter
\newcommand\calltwocolumn{%
  \expandafter\twocolumn
  \expandafter[%
  \expandafter{%
  \romannumeral0\expandafter\@gobble\string} %
}%
\makeatother

Der Befehl \calltwocolumnwürde die folgenden Tokens ergeben:

  \expandafter\twocolumn
  \expandafter[%
  \expandafter{%
  \romannumeral0\expandafter\@gobble\string} %

Die \expandafter-Kette würde die -Erweiterung einschalten \romannumeral, bevor \twocolumnsie ausgeführt würde. \romannumeralDie -Erweiterung würde wiederum zu einer Stringifizierung und zum Verschlingen der schließenden Klammer führen, bevor sie beendet würde, ohne ein Token zu liefern.

Manche Leute sind zurückhaltend, wenn es um die Verwendung geht \makeatletter. Sie können dies vermeiden, indem Sie verwenden \csname:

\newcommand\calltwocolumn{%
  \expandafter\twocolumn
  \expandafter[%
  \expandafter{%
  \romannumeral0\csname @gobble\expandafter\endcsname\string} %
}%

Sie können dies auch vermeiden, indem Sie \iffalseden Vorschlag von Gustavo Mezzetti verwenden:

\newcommand\calltwocolumn{%
  \expandafter\twocolumn
  \expandafter[%
  \expandafter{%
  \iffalse}\fi
}%

verwandte Informationen