\begingroup
\begingroup
ist ein TeX-Primitv zum Öffnen einer Gruppe, die mit \endgroup
beendet wird.
Inhaltsverzeichnis
Verwendung
Syntax
\begingroup lokal auszuführender Code \endgroup
Beschreibung
Normalerweise sind Definitionen und Zuweisungen an Register bei TeX lokal zur aktuellen Gruppe. Der Anfang einer solchen Gruppe ist immer auf das TeX-Primitv \begingroup
und dessen Ende auf das TeX-Primitiv \endgroup
zurückzuführen. In LaTeX stellen auch (fast) alle Umgebungen, die mit \begin{Umgebungsname}
begonnen werden und mit \end{Umgebungsname}
beendet werden, eine solche Gruppe dar. Dazu wird in der Definition von \begin
sehr früh \begingroup
ausgeführt, noch bevor der spezifische Startcode der Umgebung zur Anwendung kommt. Ebenso ist in der Definition von \end
erst nach der Ausführung des spezifischen Endcodes der Umgebung enthalten.
Bei LaTeX haben außerdem {
und }
die Kategorie Codes 1 und 2, wodurch sie außer bei Verwendung als Argumentklammern ebenfalls die Bedeutung von \begingroup
und \endgroup
erhalten.
Globale Zuweisungen innerhalb einer Gruppe sind möglich. So arbeiten beispielsweise \setcounter
, \stepcounter
und \addtocounter
immer global. Eine Besonderheit stellt \refstepcounter
dar. Die darin enthaltene Erhöhung des Zählers mit \stepcounter
arbeitet global. Die Änderung der Label-Referenz ist hingegen lokal.
Beispiele
\documentclass{article}
\begin{document}
% ACHTUNG: Hier werden Definitionen innerhalb des Dokumentkörpers
% vorgenommen. Dies dient nur der Demonstration. Anwender sollten in
% der Regel Definitionen in der Dokumentpräambel vornehmen und
% ggf. hinter semantischen Markup-Anweisungen verbergen!
\newcommand*{\Test}{Test}
\newcommand*{\FiveTest}{\Test\ \Test\ \Test\ \Test\ \Test}
\newcommand*{\TenTest}{\FiveTest\ \FiveTest}
\newcommand*{\MoreTest}{\TenTest\ \TenTest\ \TenTest\ \TenTest.}
\MoreTest
\begingroup
\renewcommand*{\Test}{Toast}
\MoreTest
\endgroup
\MoreTest
\end{document}
Im Beispiel wird innerhalb einer mit \begingroup…\endgroup
umschlossenen Gruppe \Test
lokal umdefiniert, so dass das \MoreTest
innerhalb dieser Gruppe nicht mehr vielfach das Wort Test
, sondern das Wort Toast
ausgibt. Nach dem Ende der Gruppe wird dagegen wieder Test
ausgegeben, da die Änderung der Definition mit dem Ende der Gruppe ihre Wirkung verliert.
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\begin{document}
\section{Erster Abschnitt}\label{sec:firststart}
\blindtext\label{sec:firstend}
\begingroup\section{Zweiter Abschnitt}\label{sec:secondstart}\endgroup
\blindtext\label{sec:whichend}
\section{Auflösung}
Das Label \texttt{sec:firststart} referenziert
Abschnitt~\ref{sec:firststart}. Ebenso referenziert Label
\texttt{sec:firstend} selbstverständlich Abschnitt~\ref{sec:firstend}.
Das Label \texttt{sec:secondstart} referenziert
Abschnitt~\ref{sec:secondstart}. Da jedoch die Wirkung von
\verb|\refstepcounter| innerhalb von \verb|\section| mit dem \verb|\endgroup|
endet, referenziert \texttt{sec:whichend} wieder Abschnitt~\ref{sec:whichend}.
\end{document}
Dieses Beispiel zeigt, dass die Verwendung von Gruppen mit Bedacht erfolgen sollte, indem es eines der Risiken der Verwendung von Überschriften innerhalb einer Gruppe verdeutlicht.