Zu Beginn der Quelldatei beamerbasedecode.sty
der beamer
Klasse werden zwei Schalter definiert:
\newif\ifbeamer@anotherslide
\newif\ifbeamer@localanotherslide
Durch das Lesen von beamerbasedecode.sty
und beamerbaseframe.sty
habe ich einige Kenntnisse über \ifbeamer@anotherslide
: In jeder frame
Umgebung beamer
ruft auf \beamer@masterdecode
und \beamer@masterdecode
würde den Schalter ändern \ifbeamer@anotherslide
. Während dies zutrifft, beamer
ruft würde \beamer@masterdecode
immer wieder auf und generiert schließlich alle Folien im Rahmen.
Im Inneren \beamerbasedecode.sty
scheinen \ifbeamer@anotherslide
und \ifbeamer@localanotherslide
immer den gleichen Wert zu haben:
\global\beamer@anotherslidetrue\beamer@localanotherslidetrue
Der einzige Unterschied besteht darin, dass es sich um \global
ein Makro davor handelt. Im Hauptmakro \beamer@masterdecode
wird das zweite Makro jedoch auch global gemacht.
\def\beamer@stoptexts{| stop:0| }
{
\catcode`\|=13
\catcode`\:=13
\catcode`\,=13
\catcode`\.=13
\catcode`\+=13
\catcode`\-=13
\catcode`\(=13
\catcode`\)=13
\catcode`\ =13
\gdef\beamer@masterdecode#1{% must be called within a group
\ifnum\catcode`\|=13\edef|{\string|}\fi%
\ifnum\catcode`\:=13\edef:{\string:}\fi%
\ifnum\catcode`\,=13\edef,{\string,}\fi%
\ifnum\catcode`\.=13\edef.{\string.}\fi%
\ifnum\catcode`\+=13\edef+{\string+}\fi%
\ifnum\catcode`\-=13\edef-{\string-}\fi%
\ifnum\catcode`\(=13\edef({\string(}\fi%
\ifnum\catcode`\)=13\edef){\string)}\fi%
\ifnum\catcode`\ =13\edef {\string }\fi%
\edef\beamer@@@temp{#1\beamer@stoptexts}%
\beamer@localanotherslidefalse%
\setbox0=\hbox{%
\expandafter\beamer@decode\beamer@@@temp%
\ifbeamer@localanotherslide\global\beamer@localanotherslidetrue\fi}%
}%
Das verwirrt mich: Was sind die Unterschiede zwischen \ifbeamer@anotherslide
und \ifbeamer@localanotherslide
? Warum brauchen wir \ifbeamer@localanotherslide
?