1% Copyright 2003--2007 by Till Tantau
2% Copyright 2010 by Vedran Mileti\'c
3% Copyright 2011--2013,2015 by Vedran Mileti\'c, Joseph Wright
4% Copyright 2016 by Joseph Wright
5% Copyright 2017,2018 by Louis Stuart, Joseph Wright
6%
7% This file may be distributed and/or modified
8%
9% 1. under the LaTeX Project Public License and/or
10% 2. under the GNU Public License.
11%
12% See the file doc/licenses/LICENSE for more details.
13
14\mode
15<presentation>
16
17%
18% Setting the left and right margin
19%
20%
21\beamer@leftmargin=1cm
22\beamer@rightmargin=1cm
23
24\newif\ifbeamer@dogeometry
25
26\define@key{beamer@margin}{text margin left}{\beamer@leftmargin=#1\beamer@dogeometrytrue}
27\define@key{beamer@margin}{text margin right}{\beamer@rightmargin=#1\beamer@dogeometrytrue}
28\define@key{beamer@margin}{sidebar width left}{\beamer@leftsidebar=#1\beamer@dogeometrytrue}
29\define@key{beamer@margin}{sidebar width right}{\beamer@rightsidebar=#1\beamer@dogeometrytrue}
30
31\newcommand{\setbeamersize}[1]{%
32  \beamer@dogeometryfalse%
33  \setkeys{beamer@margin}{#1}%
34  \ifbeamer@dogeometry%
35    % Reset left margin now
36    \beamer@tempdim=\beamer@leftmargin%
37    \advance\beamer@tempdim by\beamer@leftsidebar%
38    \geometry{left=\the\beamer@tempdim}%
39    % Reset right margin now
40    \beamer@tempdim=\beamer@rightmargin%
41    \advance\beamer@tempdim by\beamer@rightsidebar%
42    \geometry{right=\the\beamer@tempdim}%
43  \fi%
44}
45
46\mode
47<article>
48{
49  \newcommand{\setbeamersize}[1]{}
50}
51
52
53
54
55
56% Constructing a frame:
57
58\let\@mkboth\@gobbletwo
59\def\ps@navigation{
60  \def\@oddhead{%
61    \begingroup%
62    \setbox\beamer@tempbox=\hbox{\usebeamertemplate***{background canvas}\hyper@pagetransition\hyper@pageduration}%
63    \beamer@tempdim=\ht\beamer@tempbox%
64    \setbox\beamer@tempbox=\hbox{\lower\beamer@tempdim\hbox{\box\beamer@tempbox}}%
65    \wd\beamer@tempbox=0pt\ht\beamer@tempbox=0pt\dp\beamer@tempbox=0pt%
66    \setbox\@tempboxa=\hbox{\usebeamertemplate***{background}}%
67    \beamer@tempdim=\ht\@tempboxa%
68    \setbox\@tempboxa=\hbox{\lower\beamer@tempdim\hbox{\box\@tempboxa}}%
69    \wd\@tempboxa=0pt\ht\@tempboxa=0pt\dp\@tempboxa=0pt%
70    \vbox{\hbox{\hskip-\Gm@lmargin\box\beamer@tempbox\box\@tempboxa}%
71      \hbox{%
72        {%
73          \setbox\beamer@tempbox=\hbox{\hskip-\Gm@lmargin%
74            {\setbox\beamer@tempbox=\hbox{\vbox to \sidebarheight{%
75                  \usebeamercolor*{sidebar left}%
76                  \usebeamertemplate{sidebar canvas left}%
77                  \vss%
78                }}%
79              \wd\beamer@tempbox=0pt\ht\beamer@tempbox=0pt\dp\beamer@tempbox=0pt%
80              \box\beamer@tempbox}%
81            {%
82              \vbox to \sidebarheight{%
83                \usebeamertemplate***{sidebar left}%
84                \vfil%
85            }}}%
86          \beamer@tempdim=\ht\beamer@tempbox%
87          \setbox\beamer@tempbox=\hbox{{\lower\beamer@tempdim\hbox{\box\beamer@tempbox}}}%
88          \wd\beamer@tempbox=0pt\ht\beamer@tempbox=0pt\dp\beamer@tempbox=0pt%
89          \box\beamer@tempbox%
90        }%
91        {% print right sidebar first, since it should be overwritten by headline
92          \setbox\beamer@tempbox=\hbox{\hskip\textwidth\hskip\beamer@rightmargin%
93            {\setbox\beamer@tempbox=\hbox{\vbox to \sidebarheight{%
94                  \usebeamercolor*{sidebar right}%
95                  \usebeamertemplate{sidebar canvas right}%
96                  \vss%
97                }}%
98              \wd\beamer@tempbox=0pt\ht\beamer@tempbox=0pt\dp\beamer@tempbox=0pt%
99              \box\beamer@tempbox}%
100            {%
101              \vbox to \sidebarheight{%
102                \usebeamertemplate***{sidebar right}%
103                \vfil%
104            }}}%
105          \beamer@tempdim=\ht\beamer@tempbox%
106          \setbox\beamer@tempbox=\hbox{{\lower\beamer@tempdim\hbox{\box\beamer@tempbox}}}%
107          \wd\beamer@tempbox=0pt\ht\beamer@tempbox=0pt\dp\beamer@tempbox=0pt%
108          \box\beamer@tempbox%
109        }%
110        \beamer@typesetheadorfoot{headline}%
111      }%
112      \hfil}%
113    \endgroup}
114  \def\@oddfoot{%
115    \vbox{\offinterlineskip\hbox{\beamer@typesetheadorfoot{footline}%
116    \hfil}\hbox{}}\hfil
117  }%
118  \let\@evenhead\@oddhead
119  \let\@evenfoot\@oddfoot}
120\pagestyle{navigation}
121
122\def\beamer@typesetheadorfoot#1{% typeset the head or footline
123  {\parskip0pt\offinterlineskip%
124    \hbox{%
125      \hskip-\Gm@lmargin%
126      \hbox{%
127        \vbox{%
128          \@tempdima=\textwidth%
129          \textwidth=\paperwidth%
130          \hsize=\textwidth%
131          \def\\{,}%
132          \usebeamertemplate***{#1}%
133        }}%
134      \hskip-\Gm@rmargin%
135    }}\hfil%
136}
137
138%
139% Patch empty page style, so that transitions and navigation still works
140%
141\def\ps@empty{%
142  \let\@mkboth\@gobbletwo%
143  \def\@oddhead{\begingroup%
144    \setbox\beamer@tempbox=\hbox{\usebeamertemplate***{background canvas}\hyper@pagetransition\hyper@pageduration}%
145    \beamer@tempdim=\ht\beamer@tempbox%
146    \setbox\beamer@tempbox=\hbox{\lower\beamer@tempdim\hbox{\box\beamer@tempbox}}%
147    \wd\beamer@tempbox=0pt\ht\beamer@tempbox=0pt\dp\beamer@tempbox=0pt%
148    \setbox\@tempboxa=\hbox{\usebeamertemplate***{background}}%
149    \beamer@tempdim=\ht\@tempboxa%
150    \setbox\@tempboxa=\hbox{\lower\beamer@tempdim\hbox{\box\@tempboxa}}%
151    \wd\@tempboxa=0pt\ht\@tempboxa=0pt\dp\@tempboxa=0pt%
152    \vbox{\hbox{\hskip-\Gm@lmargin\raise\headheight\box\beamer@tempbox\raise\headheight\box\@tempboxa}\hfil}%
153    \endgroup%
154  }
155  \def\@oddfoot{\normalcolor{\hfil%
156    \setbox\beamer@tempbox=\hbox{\usebeamertemplate***{navigation symbols}\hskip-\Gm@rmargin\hskip2pt}%
157    \ht\beamer@tempbox=0pt%
158    \dp\beamer@tempbox=0pt%
159    \box\beamer@tempbox}}
160  \let\@evenhead\@oddhead\let\@evenfoot\@oddfoot}
161
162\def\beamer@calculateheadfoot{%
163  \setbox\beamer@tempbox=\hbox{{\beamer@typesetheadorfoot{footline}}}%
164  \footheight=\ht\beamer@tempbox%
165  \advance\footheight by \dp\beamer@tempbox%
166  \advance\footheight by 4pt%
167  \setbox\beamer@tempbox=\hbox{{\beamer@typesetheadorfoot{headline}}}%
168  \headheight=\ht\beamer@tempbox%
169  \headdp=\dp\beamer@tempbox%
170  \advance\headheight by\headdp%
171  \sidebarheight=\paperheight%
172  \advance\sidebarheight by-\headheight%
173  \advance\sidebarheight by\headdp%
174  \advance\sidebarheight by-\footheight%
175  \advance\sidebarheight by 4pt%
176  \footskip=\footheight%
177  \textheight=\paperheight%
178  \advance\textheight by-\footheight%
179  \advance\textheight by-\headheight%
180  \@colht\textheight%
181  \@colroom\textheight%
182  \vsize\textheight%
183}
184
185
186\def\insertpagenumber{\thepage}
187
188
189
190%
191%
192% Columns
193%
194%
195\define@key{beamer@col}{onlytextwidth}[true]{%
196  \def\beamer@colentrycode{\hbox to\textwidth\bgroup\ignorespaces}%
197  \def\beamer@colexitcode{\unskip\egroup}}
198\define@key{beamer@col}{totalwidth}{%
199  \def\beamer@colentrycode{\hbox to#1\bgroup\ignorespaces}%
200  \def\beamer@colexitcode{\unskip\egroup}}
201\define@key{beamer@col}{c}[true]{\def\beamer@colmode{c}\def\beamer@colalign{c}\def\beamer@colheadskip{}}
202\define@key{beamer@col}{t}[true]{\def\beamer@colmode{t}\def\beamer@colalign{t}\def\beamer@colheadskip{}}
203\define@key{beamer@col}{T}[true]{\def\beamer@colmode{T}\def\beamer@colalign{t}\def\beamer@colheadskip{\vskip-1ex\nointerlineskip}}
204\define@key{beamer@col}{b}[true]{\def\beamer@colmode{b}\def\beamer@colalign{b}\def\beamer@colheadskip{}}
205
206\newenvironment<>{columns}[1][]{%
207  \begin{actionenv}#2%
208  \def\beamer@colentrycode{%
209    \hbox to\textwidth\bgroup%
210    \leavevmode%
211    \hskip-\beamer@leftmargin%
212    \nobreak%
213    \beamer@tempdim=\textwidth%
214    \advance\beamer@tempdim by\beamer@leftmargin%
215    \advance\beamer@tempdim by\beamer@rightmargin%
216    \hbox to\beamer@tempdim\bgroup%
217    \hbox{}\hfill\ignorespaces}%
218  \def\beamer@colexitcode{\egroup%
219    \nobreak%
220    \hskip-\beamer@rightmargin\egroup}%
221  \ifbeamer@centered\setkeys{beamer@col}{c}\else\setkeys{beamer@col}{t}\fi%
222  \setkeys{beamer@col}{#1}%
223  \par%
224  \beamer@colentrycode%
225  \def\beamer@colclose{}\ignorespaces}%
226  {\beamer@colclose\def\beamer@colclose{}\beamer@colexitcode\end{actionenv}}%
227
228\mode
229<article>
230{
231  % do sth. more intelligent in the future
232  \newenvironment<>{columns}[1][]{}{}
233}
234
235
236
237
238%
239%
240% Column command/environment
241%
242%
243
244\mode
245<all>
246{
247\def\beamer@columnname{column}
248\def\column{%
249  \ifx\@currenvir\beamer@columnname%
250  \let\beamer@next=\beamer@columnenv%
251  \else%
252  \let\beamer@next=\beamer@columncom%
253  \fi%
254  \beamer@next}
255}
256
257\newenvironment<>{beamer@columnenv}[2][\beamer@colmode]{%
258  \beamer@colclose\def\beamer@colclose{}%
259  \begin{actionenv}#3%
260    \setkeys{beamer@col}{#1}%
261    \begin{minipage}[\beamer@colalign]{#2}%
262      \leavevmode\raggedright\beamer@colheadskip\ignorespaces}
263    {\end{minipage}\hfill\end{actionenv}\@ignoretrue}
264\let\endcolumn\endbeamer@columnenv
265
266\newcommand<>\beamer@columncom[2][\beamer@colmode]{%
267  \beamer@colclose%
268  \def\beamer@colclose{\end{minipage}\hfill\end{actionenv}\ignorespaces}%
269\begin{actionenv}#3%
270  \setkeys{beamer@col}{#1}%
271  \begin{minipage}[\beamer@colalign]{#2}%
272    \leavevmode\raggedright\beamer@colheadskip\ignorespaces}
273
274
275\mode
276<article>
277{
278  \newenvironment<>{beamer@columnenv}[2][]{}{}
279  \newcommand<>{\beamer@columncom}[2][]{}
280}
281
282
283
284%
285%
286% Footnotes
287%
288%
289
290\def\@makefnmark{\hbox{\@textsuperscript{{\usebeamercolor[fg]{footnote mark}\usebeamerfont*{footnote mark}\@thefnmark}}}}
291
292\def\@makefntext#1{%
293  \def\insertfootnotetext{#1}%
294  \def\insertfootnotemark{\@makefnmark}%
295  \usebeamertemplate***{footnote}}
296
297\newbox\beamer@footins
298
299\newcommand<>\beamer@framefootnotetext[1]{%
300  \global\setbox\beamer@footins\vbox{%
301    \hsize\framewidth
302    \textwidth\hsize
303    \columnwidth\hsize
304    \unvbox\beamer@footins
305    \reset@font\footnotesize
306    \@parboxrestore
307    \protected@edef\@currentlabel
308         {\csname p@footnote\endcsname\@thefnmark}%
309    \color@begingroup
310      \uncover#2{\@makefntext{%
311        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}}%
312    \color@endgroup}}
313
314\renewcommand<>\@mpfootnotetext[1]{%
315  \global\setbox\@mpfootins\vbox{%
316    \unvbox\@mpfootins
317    \reset@font\footnotesize
318    \hsize0.85\paperwidth
319    \@parboxrestore
320    \protected@edef\@currentlabel
321         {\csname p@mpfootnote\endcsname\@thefnmark}%
322    \color@begingroup
323      \uncover#2{\@makefntext{%
324        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}}%
325    \color@endgroup}}
326
327\let\@footnotetext=\beamer@framefootnotetext
328
329\define@key{beamerfootnote}{frame}[true]{%
330  \let\beamer@footnotetext=\beamer@framefootnotetext%
331  \def\beamer@mpfn{footnote}%
332  \def\beamer@thempfn{\thefootnote}}
333
334\renewcommand<>{\footnote}[1][]{%
335  \let\beamer@footnotetext=\@footnotetext%
336  \let\beamer@mpfn=\@mpfn%
337  \let\beamer@thempfn=\thempfn%
338  \let\beamer@kvorig=\KV@errx%
339  \let\beamer@xkvorig=\XKV@err
340  \def\beamer@footarg{}%
341  \def\KV@errx##1{\edef\beamer@footarg{\@tempa}}%
342  \def\XKV@err##1{\edef\beamer@footarg{\XKV@tkey}}%
343  \setkeys{beamerfootnote}{#1}%
344  \let\KV@errx=\beamer@kvorig%
345  \let\XKV@errx=\beamer@xkvorig
346  \ifx\beamer@footarg\@empty%
347    \def\beamer@next{\stepcounter\beamer@mpfn
348      \protected@xdef\@thefnmark{\beamer@thempfn}%
349      \@footnotemark\beamer@footnotetext#2}%
350  \else%
351    \def\beamer@next{%
352      \begingroup
353        \csname c@\beamer@mpfn\endcsname\beamer@footarg\relax
354        \unrestored@protected@xdef\@thefnmark{\beamer@thempfn}%
355      \endgroup
356      \@footnotemark\beamer@footnotetext#2}%
357  \fi%
358  \beamer@next}
359
360\mode
361<article>
362{
363  \define@key{beamerfootnote}{frame}[true]{}
364
365\let\beamer@origfootnote=\footnote
366  \renewcommand<>\footnote[1][]{%
367    \let\beamer@kvorig=\KV@errx%
368    \let\beamer@xkvorig=\XKV@err
369    \def\beamer@footarg{}%
370    \def\KV@errx##1{\edef\beamer@footarg{\@tempa}}%
371    \def\XKV@err##1{\edef\beamer@footarg{\XKV@tkey}}%
372    \setkeys{beamerfootnote}{#1}%
373    \let\KV@errx=\beamer@kvorig%
374    \let\XKV@errx=\beamer@xkvorig
375    \ifx\beamer@footarg\@empty%
376      \edef\beamer@next{\noexpand\beamer@origfootnote}%
377    \else%
378      \edef\beamer@next{\noexpand\beamer@origfootnote[\beamer@footarg]}%
379    \fi%
380    \beamer@next}
381}
382
383
384\mode
385<all>
386