% Copyright (C) 2018 - 2024 Pasquale Claudio Africa and the LaTeX community. % A full list of contributors can be found at % % https://github.com/pcafrica/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 . \mode \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} \newcounter{realframenumber} % FRAMETITLE TEMPLATES. -------------------------------------------------------- \defbeamertemplate*{frametitle}{focus}{% % If not title page. \ifnum\value{realframenumber}>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{realframenumber}>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} % Comparision token for totalframenumbering. \def\no{no} \defbeamertemplate*{footline}{progressbar}{% % If not appendix. \ifnum\mainend<0% From package appendixnumberbeamer. % \settowidth{\focus@pbar@leftoffset}{1}% \addtolength{\focus@pbar@leftoffset}{1.5em}% % \ifx\beamer@focus@totalframenumbering\no% \settowidth{\focus@pbar@rightoffset}{}% \addtolength{\focus@pbar@rightoffset}{0.5em}% \else% \settowidth{\focus@pbar@rightoffset}{\inserttotalframenumber}% \addtolength{\focus@pbar@rightoffset}{1.5em}% \fi% % % If not title page. \ifnum\value{realframenumber}>0% \ifnum\value{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}; \ifx\beamer@focus@totalframenumbering\no% \else% \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}; \fi% \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}; \ifx\beamer@focus@totalframenumbering\no% \else% \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}; \fi% \end{tikzpicture}% \fi% \fi% \fi% } % Full bar footline. \def\footlineinfo#1{\def\focus@footlineinfo{#1}} \footlineinfo{} % Empty by default. \defbeamertemplate{footline}{fullbar}{% % If not appendix. \ifnum\mainend<0% From package appendixnumberbeamer. % \settowidth{\focus@pbar@leftoffset}{1}% \addtolength{\focus@pbar@leftoffset}{1.5em}% % \ifx\beamer@focus@totalframenumbering\no% \settowidth{\focus@pbar@rightoffset}{}% \addtolength{\focus@pbar@rightoffset}{0.5em}% \else% \settowidth{\focus@pbar@rightoffset}{\inserttotalframenumber}% \addtolength{\focus@pbar@rightoffset}{1.5em}% \fi% % % If not title page. \ifnum\value{realframenumber}>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); \ifx\focus@footlineinfo\empty% \else% \node[anchor=west, footline.fg] at ({\the\focus@pbar@leftoffset},{0.5*\focus@pbar@height}) {\focus@footlineinfo}; \fi% \node[anchor=east, footline.fg] at ({\paperwidth-\the\focus@pbar@rightoffset},{0.5*\focus@pbar@height}) {\strut\insertframenumber}; \ifx\beamer@focus@totalframenumbering\no% \else% \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}; \fi% \end{tikzpicture}% \fi% \fi% } \defbeamertemplate{footline}{minimal}{% % If not appendix. \ifnum\mainend<0% From package appendixnumberbeamer. % \settowidth{\focus@pbar@leftoffset}{1}% \addtolength{\focus@pbar@leftoffset}{1.5em}% % \ifx\beamer@focus@totalframenumbering\no% \settowidth{\focus@pbar@rightoffset}{}% \addtolength{\focus@pbar@rightoffset}{0.5em}% \else% \settowidth{\focus@pbar@rightoffset}{\inserttotalframenumber}% \addtolength{\focus@pbar@rightoffset}{1.5em}% \fi% % % If not title page. \ifnum\value{realframenumber}>0% \begin{tikzpicture}[inner xsep=0.5em, inner ysep=0.5ex] \clip (0,0) rectangle ++(\paperwidth,\the\focus@pbar@height); \fill[footline.fg, opacity=0, text opacity=1] (0,0) rectangle ++(\paperwidth,\the\focus@pbar@height); \ifx\focus@footlineinfo\empty% \else% \node[anchor=west, footline.bg] at ({\the\focus@pbar@leftoffset},{0.5*\focus@pbar@height}) {\focus@footlineinfo}; \fi% \node[anchor=east, footline.bg] at ({\paperwidth-\the\focus@pbar@rightoffset},{0.5*\focus@pbar@height}) {\strut\insertframenumber}; \ifx\beamer@focus@totalframenumbering\no% \else% \node[footline.bg] at ({\paperwidth-\the\focus@pbar@rightoffset},{0.5*\focus@pbar@height}) {\strut/}; \node[anchor=west, footline.bg] at ({\paperwidth-\the\focus@pbar@rightoffset},{0.5*\focus@pbar@height}) {\strut\inserttotalframenumber}; \fi% \end{tikzpicture}% \fi% \fi% } % Empty footline. \defbeamertemplate{footline}{none}{} \DeclareOptionBeamer{numbering}{\def\beamer@focus@numbering{#1}} \ExecuteOptionsBeamer{numbering=progressbar} \DeclareOptionBeamer{totalframenumbering}{\def\beamer@focus@totalframenumbering{#1}} \ExecuteOptionsBeamer{totalframenumbering=yes} \ProcessOptionsBeamer \def\beamer@focus@numberingprogressbar{progressbar} \def\beamer@focus@numberingfullbar{fullbar} \def\beamer@focus@numberingminimal{minimal} \def\beamer@focus@numberingnone{none} \def\beamer@focus@totalframenumberingyes{yes} \def\beamer@focus@totalframenumberingno{no} % 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}{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}{% \stepcounter{realframenumber} \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]% \else% \ifx\beamer@focus@numbering\beamer@focus@numberingminimal% \setbeamertemplate{footline}[minimal]% \else% \setbeamertemplate{footline}[none]% \fi \fi% \fi% % \focus@calculatefootheight% \fi% } % Enable noframenumbering option. \define@key{beamerframe}{noframenumbering}[true]{% \addtocounter{framenumber}{-1} \setlength{\focus@pbar@height}{0cm}% \focus@calculatefootheight% } % Enable plain option. \define@key{beamerframe}{plain}[true]{% \setbeamertemplate{background canvas}[focus]% \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