271 lines
9.8 KiB
TeX
271 lines
9.8 KiB
TeX
% Copyright (C) 2018-2019 Pasquale Claudio Africa and the LaTeX community.
|
|
% A full list of contributors can be found at
|
|
%
|
|
% https://github.com/elauksap/focus-beamertheme
|
|
%
|
|
% 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.
|
|
% Fix hyperref warning caused by \appendix
|
|
% (https://tex.stackexchange.com/questions/192686/hyperref-warning-caused-by-beamer-appendix).
|
|
\newcommand*{\bkmtranslateto}{\languagename}
|
|
\newcommand*{\bkmtranslate}[1]{%
|
|
\ifcsname tr@@@\bkmtranslateto @#1\endcsname
|
|
\csname tr@@@\bkmtranslateto @#1\endcsname
|
|
\else
|
|
#1%
|
|
\fi
|
|
}
|
|
\pdfstringdefDisableCommands{\let\translate\bkmtranslate}
|
|
\RequirePackage{bookmark}
|
|
|
|
\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>
|