Wenn ich die Wirkung eines Befehls oder einer Redefinition begrenzen will, sofern das geht und wenn eine vorhandene Umgebung das nicht eh schon begrenzt, dann benutze ich geschweifte Klammern:

Code, hier editierbar zum Übersetzen:
{\befehl
... % Text und Befehle
}% hier wirkt \befehl nicht mehr
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Nun sehe ich im Code von anderen oft

Code, hier editierbar zum Übersetzen:
\begingroup
...
\endgroup
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

oder

Code, hier editierbar zum Übersetzen:
\bgroup
...
\egroup
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Was sind die Unterschiede? Falls es Unterschiede gibt, in welchen Situationen sollte man die jeweilige Syntax verwenden?

gefragt 28 Jun '13, 16:26

Felix's gravatar image

Felix
1.3k525667
Akzeptiert-Rate: 47%

\begingroup und \endgroup sind TeX primitives, die eine Gruppe öffnen bzw. schließen, während \bgroup und \egroup im LaTeX Kernel (auch im plain Format) folgendermaßen definiert sind: \let\bgroup={ \let\egroup=}

(28 Jun '13, 16:42) cgnieder

Die genannten \let Assignments stehen in Zeile 517 von plain.tex und in Zeile 78 (und nochmal in den Zeilen 443 und 444) von latex.ltx.

(28 Jun '13, 17:23) cgnieder

In einigen Situationen kann man bgroup und egroup auch als Ersatz für { ... } verwenden. Das Beispiel mit hbox{...}, aber auch hboxbgroup ... egroup ist ja schon in der Antwort.

Außerdem geht auch toks0=bgroup ... }, aber hier nur die öffnende Klammer. Aber diese Spitzfindigkeiten sprengen die Antworten auf diese Frage, oder?

(28 Jun '13, 21:07) bernd

@Bernd: Ich denke nicht. Wir können natürlich auch Spitzfindigkeiten angeben. Habe u.a. mit meinen letzten zwei Aufzählungspunkten versucht, welche zu benennen.

(28 Jun '13, 21:51) Marco_D

Wie du richtig gesagt hast, erlauben alle drei Paare Gruppen zu erstellen.

Alle nachstehende Beispiele sind mit plain TeX zu übersetzen.

Es gibt aber gewisse Besonderheiten. So kannst du { und \egroup kombinieren:

Code, hier editierbar zum Übersetzen:
{\bf Hallo \egroup Welt!
\bye
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Diese Kombination ist mittels \begingroup und \endgroup nicht möglich.

Zudem können als Argumentklammern { sowie \bgroup genutzt werden. Dies zeigt folgendes Beispiel:

Code, hier editierbar zum Übersetzen:
\setbox0=\hbox\bgroup \bf Hallo \egroup
\setbox0=\hbox{\unhbox0 Welt}
\box0
\bye
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Somit sind auch makroübergreifende Gruppen möglich, was weder durch {} noch \begingroup erreicht werden kann. Das nachstehendes Beispiel zeigt dieses:

Code, hier editierbar zum Übersetzen:
\def\startbox{\setbox0=\hbox\bgroup}
\def\endbox{\egroup\par Die Ausgabe: \box0}
\startbox
Hallo Welt
\endbox
\bye
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Natürlich kann aber \begingroup und \endgroup in den genannten Anweisungen verwendet werden:

Code, hier editierbar zum Übersetzen:
\def\startbox{\begingroup\setbox0=\hbox\bgroup}
\def\endbox{\egroup\par Die Ausgabe: \box0\endgroup}
\startbox
Hallo Welt
\endbox
\bye
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Insgesamt lässt sich also festhalten, dass {...} und \bgroup...\egroup Argumente gruppieren können.

Die Anweisungen \begingroup...\endgroup erzeugen einen Block, und zu jedem \begingroup muss ein \endgroup existieren.

Besonderheiten:

  • Beachte bitte, dass \def\foobar\bgroup und \def\foobar{ verschieden sind.
  • \begingroup ändert nichts an Eigenschaften, wie folgendes Beispiel zeigt:

    Code, hier editierbar zum Übersetzen:
    $$ 1\bgroup+\egroup1=x$$
    $$ 1\begingroup+\endgroup1=x$$
    \bye
    הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Aufgrund der Eindeutigkeit der Korrespondenz von \begingroup und \endgroup rate ich zu diesen Anweisungen. Die Kombination von \bgroup...\egroup bzw. {} sollte man nur anwenden, wenn man sie auch wirklich braucht.

Permanenter link

beantwortet 28 Jun '13, 16:45

Marco_D's gravatar image

Marco_D
43015
Akzeptiert-Rate: 36%

bearbeitet 04 Jul '13, 18:56

Vielen Dank für die tolle Erklärung! Ich ziehe also \begingroup vor und behalte im Kopf, dass \bgroup auch diese Besonderheit hat, über Makros hinweg gruppieren zu können.

(05 Jul '13, 10:45) Felix
Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×2

gestellte Frage: 28 Jun '13, 16:26

Frage wurde gesehen: 26,207 Mal

zuletzt geändert: 05 Jul '13, 10:48

verwandte Fragen