256 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			TeX
		
	
	
			
		
		
	
	
			256 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			TeX
		
	
	
% Copyright (C) 2018 Pasquale Claudio Africa.
 | 
						|
%               2018 Sebastian Friedl.
 | 
						|
%
 | 
						|
% This file is part of beamerthemefocus.
 | 
						|
%
 | 
						|
% beamerthemefocus is free software: you can redistribute it and/or modify
 | 
						|
% it under the terms of the GNU General Public License as published by
 | 
						|
% the Free Software Foundation, either version 3 of the License, or
 | 
						|
% (at your option) any later version.
 | 
						|
% 
 | 
						|
% beamerthemefocus is distributed in the hope that it will be useful,
 | 
						|
% but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | 
						|
% GNU General Public License for more details.
 | 
						|
% 
 | 
						|
% You should have received a copy of the GNU General Public License
 | 
						|
% along with beamerthemefocus. If not, see <http://www.gnu.org/licenses/>.
 | 
						|
 | 
						|
\mode<presentation>
 | 
						|
 | 
						|
\RequirePackage{appendixnumberbeamer}% Don't number appendix frames.
 | 
						|
\RequirePackage{etoolbox}% \BeforeBeginEnvironment
 | 
						|
\RequirePackage{tikz}
 | 
						|
 | 
						|
 | 
						|
% FRAMETITLE TEMPLATES. --------------------------------------------------------
 | 
						|
\defbeamertemplate*{frametitle}{focus}{%
 | 
						|
    % If not title page.
 | 
						|
    \ifnum\value{framenumber}>0%
 | 
						|
        \vspace{-1pt}%
 | 
						|
        \begin{beamercolorbox}[wd=\paperwidth,leftskip=0.55cm,rightskip=0.55cm,sep=0.2cm]{frametitle}%
 | 
						|
            \strut\insertframetitle\strut%
 | 
						|
        \end{beamercolorbox}%
 | 
						|
    \fi%
 | 
						|
}
 | 
						|
 | 
						|
% Plain header.
 | 
						|
\defbeamertemplate{frametitle}{plain}{%
 | 
						|
    % If not title page.
 | 
						|
    \ifnum\value{framenumber}>0%
 | 
						|
        \vspace{-1pt}%
 | 
						|
        \begin{beamercolorbox}[wd=\paperwidth,leftskip=0.55cm,rightskip=0.55cm,sep=0.2cm,ignorebg]{frametitle}%
 | 
						|
            \strut%
 | 
						|
        \end{beamercolorbox}%
 | 
						|
    \fi%
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
% FOOTLINE TEMPLATES. ----------------------------------------------------------
 | 
						|
% Lenghts for the progress bar footline.
 | 
						|
\newlength{\focus@pbar@height}% Progress bar height.
 | 
						|
\newlength{\focus@pbar@leftoffset}
 | 
						|
\newlength{\focus@pbar@rightoffset}
 | 
						|
 | 
						|
\defbeamertemplate*{footline}{progressbar}{%
 | 
						|
    % If not appendix.
 | 
						|
    \ifnum\mainend<0% From package appendixnumberbeamer.
 | 
						|
        %
 | 
						|
        \settowidth{\focus@pbar@leftoffset}{1}%
 | 
						|
        \addtolength{\focus@pbar@leftoffset}{1.5em}%
 | 
						|
        %
 | 
						|
        \settowidth{\focus@pbar@rightoffset}{\inserttotalframenumber}%
 | 
						|
        \addtolength{\focus@pbar@rightoffset}{1.5em}%
 | 
						|
        %
 | 
						|
        % If not title page.
 | 
						|
        \ifnum\c@framenumber>0%
 | 
						|
            \ifnum\c@framenumber<\inserttotalframenumber%
 | 
						|
                \begin{tikzpicture}[inner xsep=0.5em, inner ysep=0.5ex]\usebeamerfont{footline}
 | 
						|
                    \pgfmathsetmacro{\focus@pbar@progress}%
 | 
						|
                        {(\paperwidth-\focus@pbar@leftoffset-\focus@pbar@rightoffset)*(\insertframenumber/\inserttotalframenumber)}
 | 
						|
                
 | 
						|
                    \clip (0,0) rectangle ++(\paperwidth,\the\focus@pbar@height);
 | 
						|
                    \fill[footline.bg] (0,0) rectangle ++(\the\focus@pbar@leftoffset,\the\focus@pbar@height);
 | 
						|
                    
 | 
						|
                    \fill[footline.bg] (\the\focus@pbar@leftoffset,0) rectangle ++(\focus@pbar@progress pt,\the\focus@pbar@height)
 | 
						|
                                       ++(0,{-0.5*\the\focus@pbar@height}) node[anchor=east, text=footline.fg] {\strut\insertframenumber};
 | 
						|
                    
 | 
						|
                    \fill[footline.bg] (\paperwidth,0) rectangle ++(-\the\focus@pbar@rightoffset,\the\focus@pbar@height)
 | 
						|
                                       ++(0,{-0.5*\the\focus@pbar@height}) node[anchor=west, text=footline.fg] {\strut\inserttotalframenumber};
 | 
						|
                \end{tikzpicture}%
 | 
						|
            \else%
 | 
						|
                \begin{tikzpicture}[inner xsep=0.5em, inner ysep=0.5ex]
 | 
						|
                    \clip (0,0) rectangle ++(\paperwidth,\the\focus@pbar@height);
 | 
						|
                    \fill[footline.bg] (0,0) rectangle ++(\paperwidth,\the\focus@pbar@height);
 | 
						|
                    
 | 
						|
                    \node[anchor=east, footline.fg] at ({\paperwidth-\the\focus@pbar@rightoffset},{0.5*\focus@pbar@height}) {\strut\insertframenumber};
 | 
						|
                    \node[footline.fg] at ({\paperwidth-\the\focus@pbar@rightoffset},{0.5*\focus@pbar@height}) {\strut/};
 | 
						|
                    \node[anchor=west, footline.fg] at ({\paperwidth-\the\focus@pbar@rightoffset},{0.5*\focus@pbar@height}) {\strut\inserttotalframenumber};
 | 
						|
                \end{tikzpicture}%
 | 
						|
            \fi%
 | 
						|
        \fi%
 | 
						|
    \fi%
 | 
						|
}
 | 
						|
 | 
						|
% Full bar footline.
 | 
						|
\defbeamertemplate{footline}{fullbar}{%
 | 
						|
    % If not appendix.
 | 
						|
    \ifnum\mainend<0% From package appendixnumberbeamer.
 | 
						|
        %
 | 
						|
        \settowidth{\focus@pbar@leftoffset}{1}%
 | 
						|
        \addtolength{\focus@pbar@leftoffset}{1.5em}%
 | 
						|
        %
 | 
						|
        \settowidth{\focus@pbar@rightoffset}{\inserttotalframenumber}%
 | 
						|
        \addtolength{\focus@pbar@rightoffset}{1.5em}%
 | 
						|
        %
 | 
						|
        % If not title page.
 | 
						|
        \ifnum\c@framenumber>0%
 | 
						|
            \begin{tikzpicture}[inner xsep=0.5em, inner ysep=0.5ex]
 | 
						|
                \clip (0,0) rectangle ++(\paperwidth,\the\focus@pbar@height);
 | 
						|
                \fill[footline.bg] (0,0) rectangle ++(\paperwidth,\the\focus@pbar@height);
 | 
						|
                
 | 
						|
                \node[anchor=east, footline.fg] at ({\paperwidth-\the\focus@pbar@rightoffset},{0.5*\focus@pbar@height}) {\strut\insertframenumber};
 | 
						|
                \node[footline.fg] at ({\paperwidth-\the\focus@pbar@rightoffset},{0.5*\focus@pbar@height}) {\strut/};
 | 
						|
                \node[anchor=west, footline.fg] at ({\paperwidth-\the\focus@pbar@rightoffset},{0.5*\focus@pbar@height}) {\strut\inserttotalframenumber};
 | 
						|
            \end{tikzpicture}%
 | 
						|
        \fi%
 | 
						|
    \fi%
 | 
						|
}
 | 
						|
 | 
						|
% Empty footline.
 | 
						|
\defbeamertemplate{footline}{none}{}
 | 
						|
 | 
						|
\DeclareOptionBeamer{numbering}{\def\beamer@focus@numbering{#1}}
 | 
						|
\ExecuteOptionsBeamer{numbering=progressbar}
 | 
						|
\ProcessOptionsBeamer
 | 
						|
 | 
						|
\def\beamer@focus@numberingprogressbar{progressbar}
 | 
						|
\def\beamer@focus@numberingfullbar{fullbar}
 | 
						|
\def\beamer@focus@numberingnone{none}
 | 
						|
 | 
						|
 | 
						|
% BACKGROUND CANVAS TEMPLATES. -------------------------------------------------
 | 
						|
\defbeamertemplate*{background canvas}{focus}{%
 | 
						|
    \begin{tikzpicture}
 | 
						|
        \clip (0,0) rectangle ++(\paperwidth,\paperheight);
 | 
						|
        \fill[normal text.bg] (0,0) rectangle ++(\paperwidth,\paperheight);
 | 
						|
    \end{tikzpicture}%
 | 
						|
}
 | 
						|
 | 
						|
\defbeamertemplate{background canvas}{focusplain}{%
 | 
						|
    \begin{tikzpicture}
 | 
						|
        \clip (0,0) rectangle ++(\paperwidth,\paperheight);
 | 
						|
        \fill[normal text.bg] (0,0) rectangle ++(\paperwidth,\paperheight);
 | 
						|
    \end{tikzpicture}%
 | 
						|
}
 | 
						|
 | 
						|
\defbeamertemplate{background canvas}{focusframe}{%
 | 
						|
    \begin{tikzpicture}
 | 
						|
        \clip (0,0) rectangle ++(\paperwidth,\paperheight);
 | 
						|
        \fill[frametitle.bg] (0,0) rectangle ++(\paperwidth,\paperheight);        
 | 
						|
    \end{tikzpicture}%
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
% HOOKS FOR CREATING FRAMES. ---------------------------------------------------
 | 
						|
\BeforeBeginEnvironment{frame}{%
 | 
						|
    \setbeamertemplate{background canvas}[focus]%
 | 
						|
    \setbeamertemplate{frametitle}[focus]%
 | 
						|
    %
 | 
						|
    % Reset footline height and determine it for the current slide.
 | 
						|
    \setlength{\focus@pbar@height}{0cm}%
 | 
						|
    \focus@calculatefootheight%
 | 
						|
    %
 | 
						|
    % If not appendix.
 | 
						|
    \ifnum\mainend<0 % From package appendixnumberbeamer.
 | 
						|
        \settoheight{\focus@pbar@height}{\usebeamerfont{footline}1234567890/}%
 | 
						|
        \addtolength{\focus@pbar@height}{6pt}%
 | 
						|
        %
 | 
						|
        \ifx\beamer@focus@numbering\beamer@focus@numberingprogressbar%
 | 
						|
            \setbeamertemplate{footline}[progressbar]%
 | 
						|
        \else%
 | 
						|
            \ifx\beamer@focus@numbering\beamer@focus@numberingfullbar%
 | 
						|
                \setbeamertemplate{footline}[fullbar]%
 | 
						|
            \fi%
 | 
						|
        \fi%
 | 
						|
        %
 | 
						|
        \focus@calculatefootheight%
 | 
						|
    \fi%
 | 
						|
}
 | 
						|
 | 
						|
% Enable noframenumbering option.
 | 
						|
\define@key{beamerframe}{noframenumbering}[true]{%
 | 
						|
    \setbeamertemplate{footline}[none]%
 | 
						|
    \setlength{\focus@pbar@height}{0cm}%
 | 
						|
    \focus@calculatefootheight%
 | 
						|
    %
 | 
						|
    \addtocounter{framenumber}{-1}%
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
% Enable plain option.
 | 
						|
\define@key{beamerframe}{plain}[true]{%
 | 
						|
    \setbeamertemplate{background canvas}[focusplain]%
 | 
						|
    \setbeamertemplate{frametitle}[plain]%
 | 
						|
    %
 | 
						|
    \setbeamertemplate{footline}[none]%
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
% Full vertical centering
 | 
						|
% (from https://tex.stackexchange.com/questions/247826/beamer-full-vertical-centering).
 | 
						|
\define@key{beamerframe}{c}[true]{%
 | 
						|
    \beamer@frametopskip=0pt plus 1fill\relax%
 | 
						|
    \beamer@framebottomskip=0pt plus 1fill\relax%
 | 
						|
    \beamer@frametopskipautobreak=0pt plus 0.4\paperheight\relax%
 | 
						|
    \beamer@framebottomskipautobreak=0pt plus 0.6\paperheight\relax%
 | 
						|
    \def\beamer@initfirstlineunskip{}%
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
% Enable focus option.
 | 
						|
\providebool{focus@standout}
 | 
						|
\define@key{beamerframe}{focus}[true]{%
 | 
						|
    \booltrue{focus@standout}%
 | 
						|
    \begingroup%
 | 
						|
        \setkeys{beamerframe}{noframenumbering}%
 | 
						|
        \setbeamertemplate{background canvas}[focusframe]%
 | 
						|
        \setbeamertemplate{frametitle}[plain]%
 | 
						|
        %
 | 
						|
        \setkeys{beamerframe}{c}%
 | 
						|
        \centering%
 | 
						|
        \usebeamerfont{focusframe}%
 | 
						|
        \usebeamercolor[fg]{frametitle}%
 | 
						|
}
 | 
						|
 | 
						|
\apptocmd{\beamer@reseteecodes}
 | 
						|
{%
 | 
						|
    \ifbool{focus@standout}%
 | 
						|
    {%
 | 
						|
        \endgroup%
 | 
						|
        \boolfalse{focus@standout}%
 | 
						|
    }{}%
 | 
						|
}{}{}
 | 
						|
 | 
						|
 | 
						|
% Recalculate the footline's size and refresh other parameters.
 | 
						|
% Partially copied from the definition of \beamer@calculateheadfoot.
 | 
						|
\def\focus@calculatefootheight{%
 | 
						|
    \footheight=\focus@pbar@height%
 | 
						|
    \advance\footheight by 4pt%
 | 
						|
    \sidebarheight=\paperheight%
 | 
						|
    \advance\sidebarheight by-\headheight%
 | 
						|
    \advance\sidebarheight by\headdp%
 | 
						|
    \advance\sidebarheight by-\footheight%
 | 
						|
    \advance\sidebarheight by 4pt%
 | 
						|
    \footskip=\footheight%
 | 
						|
    \textheight=\paperheight%
 | 
						|
    \advance\textheight by-\footheight%
 | 
						|
    \advance\textheight by-\headheight%
 | 
						|
    \@colht\textheight%
 | 
						|
    \@colroom\textheight%
 | 
						|
    \vsize\textheight%
 | 
						|
}
 | 
						|
 | 
						|
\mode<all>
 |