At the beginning of the source file beamerbasedecode.sty of beamer class, two switches are defined:
\newif\ifbeamer@anotherslide
\newif\ifbeamer@localanotherslide
By reading beamerbasedecode.sty and beamerbaseframe.sty, I have some knowledge of \ifbeamer@anotherslide: In every frame environment, beamer calls \beamer@masterdecode, and \beamer@masterdecode would change the switch \ifbeamer@anotherslide. While it is true, beamer would calls \beamer@masterdecode again and again, and at last generates all slides in the frame.
Inside \beamerbasedecode.sty, It seems that \ifbeamer@anotherslide and \ifbeamer@localanotherslide always have the same value:
\global\beamer@anotherslidetrue\beamer@localanotherslidetrue
The only difference is the \global before the first one. But in the main macro \beamer@masterdecode, the second one is also made global.
\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}%
}%
This confuses me: what are the differences between \ifbeamer@anotherslide and \ifbeamer@localanotherslide? Why we needs \ifbeamer@localanotherslide?
beamerI'd be extremely wary of altering it in the release version! – Joseph Wright Apr 27 '15 at 14:53