%% This is file 'hackthefootline.sty', Version 2017-08-04 %% Copyright 2017 Sebastian Friedl %% %% This work may be distributed and/or modified under the conditions of the LaTeX Project %% Public License, either version 1.3c of this license or (at your option) any later version. %% The latest version of this license is available at %% http://www.latex-project.org/lppl.txt %% and version 1.3c or later is part of all distributions of LaTeX version 2008-05-04 or later %% %% This work has the LPPL maintenace status 'maintained'. %% The current maintainer of this work is Sebastian Friedl. %% %% This work consists of the files hackthefootline.sty and hackthefootline-doc.tex %% %% ------------------------------------------------------------------------------------------- %% %% The hackthefootline package is a tool providing arbitrary footline selection for %% LaTeX beamer's standard themes (it may work with other themes as well) %% %% ------------------------------------------------------------------------------------------- %% %% Please report bugs and other problems as well as suggestions for improvements %% to my email address (sfr682k@t-online.de). %% %% ------------------------------------------------------------------------------------------- %% %% Acknowledgement: %% The basic layout of the two- and three-column footline is based on the original LaTeX %% beamer split and infolines outer themes written by Till Tantau. %% %% ------------------------------------------------------------------------------------------- \ProvidesPackage{hackthefootline}[2017/08/04 hackthefootline: arbitrary footline selection for LaTeX beamer's standard themes] \mode \newcommand{\htfprintmessage}{% \typeout{} \typeout{========================================} \typeout{FOOTLINE HACK PERFORMED} \typeout{} \typeout{hackthefootline package} \typeout{Version 2017/08/04} \typeout{} \typeout{(c) 2017 Sebastian Friedl} \typeout{Licensed under LPPL 1.3c or later} \typeout{========================================} \typeout{}} % OPTION AND VARIABLES DECLARATION -------------------------------------------------------------------------------------------------------------- \newif\ifbeamer@htfonecolfootline \beamer@htfonecolfootlinefalse \DeclareOptionBeamer{onecol}{\beamer@htfonecolfootlinetrue} \newif\ifbeamer@htftwocolsfootline \beamer@htftwocolsfootlinefalse \DeclareOptionBeamer{twocols}{\beamer@htftwocolsfootlinetrue} \newif\ifbeamer@htfthreecolsfootline \beamer@htfthreecolsfootlinefalse \DeclareOptionBeamer{threecols}{\beamer@htfthreecolsfootlinetrue} \newif\ifbeamer@htfcountappendixframes \beamer@htfcountappendixframesfalse \DeclareOptionBeamer{countappendixframes}{\beamer@htfcountappendixframestrue} \newif\ifbeamer@htffunnystuff \beamer@htffunnystufftrue \DeclareOptionBeamer{nofun}{\beamer@htffunnystufffalse} \ProcessOptionsBeamer % Show frame numbers? \newif\ifbeamer@htfshowframenrs \beamer@htfshowframenrstrue % Check for author and/or institute when inserting the separation symbol? \newif\ifbeamer@htfcheckauth \newif\ifbeamer@htfcheckinst \newif\ifbeamer@htfinsertsep \newcommand{\htfcheckauthor}{\beamer@htfcheckauthtrue \beamer@htfcheckinstfalse} \newcommand{\htfcheckinstit}{\beamer@htfcheckauthfalse \beamer@htfcheckinsttrue} \newcommand{\htfcheckboth}{ \beamer@htfcheckauthtrue \beamer@htfcheckinsttrue} \newcommand{\htfchecknone}{ \beamer@htfcheckauthfalse \beamer@htfcheckinstfalse} % Has the navigation bar been removed by the package? \newif\ifbeamer@navigationremoved \beamer@navigationremovedfalse % Variables \newif\ifbeamer@htfnotitle \newif\ifbeamer@htfshorttitle \newif\ifbeamer@htflongtitle \newif\ifbeamer@htfnoauthinst \newif\ifbeamer@htfonlyauthor \newif\ifbeamer@htfonlyinstitute \newif\ifbeamer@htfinstitutepths \newif\ifbeamer@htfauthorpths \newif\ifbeamer@htfauthinst \newif\ifbeamer@htfnodate \newif\ifbeamer@htfshortdate \newif\ifbeamer@htflongdate \newif\ifbeamer@htfnoframenrs \newif\ifbeamer@htfcounterframenrs \newif\ifbeamer@htffractionframenrs \newif\ifbeamer@htfpercentframenrs \newif\ifbeamer@htfcolonsep \newif\ifbeamer@htfcommasep \newif\ifbeamer@htfsepspace \newif\ifbeamer@htfnofootline % DEFAULT VALUES -------------------------------------------------------------------------------------------------------------------------------- \beamer@htfnofootlinefalse \ifbeamer@htfonecolfootline\else \ifbeamer@htftwocolsfootline\else \ifbeamer@htfthreecolsfootline\else \beamer@htfnofootlinetrue \fi \fi \fi \newcommand{\htfnofootlinedefault}{% \beamer@htfnoframenrstrue \beamer@htfcounterframenrsfalse \beamer@htffractionframenrsfalse \beamer@htfpercentframenrsfalse \beamer@htfshowframenrsfalse } \newcommand{\htfonecolfootlinedefault}{% \beamer@htfnotitlefalse \beamer@htfshorttitletrue \beamer@htflongtitlefalse \beamer@htfnoauthinstfalse \beamer@htfonlyauthorfalse \beamer@htfonlyinstitutefalse \beamer@htfinstitutepthsfalse \beamer@htfauthorpthsfalse \beamer@htfauthinsttrue \beamer@htfnodatetrue \beamer@htfshortdatefalse \beamer@htflongdatefalse \beamer@htfnoframenrsfalse \beamer@htfcounterframenrsfalse \beamer@htffractionframenrstrue \beamer@htfpercentframenrsfalse \beamer@htfcolonseptrue \beamer@htfcommasepfalse \beamer@htfsepspacefalse } \newcommand{\htftwocolsfootlinedefault}{% \beamer@htfnotitlefalse \beamer@htfshorttitletrue \beamer@htflongtitlefalse \beamer@htfnoauthinstfalse \beamer@htfonlyauthortrue \beamer@htfonlyinstitutefalse \beamer@htfinstitutepthsfalse \beamer@htfauthorpthsfalse \beamer@htfauthinstfalse \beamer@htfnodatetrue \beamer@htfshortdatefalse \beamer@htflongdatefalse \beamer@htfnoframenrstrue \beamer@htfcounterframenrsfalse \beamer@htffractionframenrsfalse \beamer@htfpercentframenrsfalse } \newcommand{\htfthreecolsfootlinedefault}{% \beamer@htfnotitlefalse \beamer@htfshorttitletrue \beamer@htflongtitlefalse \beamer@htfnoauthinstfalse \beamer@htfonlyauthorfalse \beamer@htfonlyinstitutefalse \beamer@htfinstitutepthstrue \beamer@htfauthorpthsfalse \beamer@htfauthinstfalse \beamer@htfnodatefalse \beamer@htfshortdatetrue \beamer@htflongdatefalse \beamer@htfnoframenrsfalse \beamer@htfcounterframenrsfalse \beamer@htffractionframenrstrue \beamer@htfpercentframenrsfalse } % ACTIONS FOR NOT COUNTING APPENDIX FRAMES ------------------------------------------------------------------------------------------------------ \ifbeamer@htfcountappendixframes\else % Required packages \RequirePackage{appendixnumberbeamer} \RequirePackage{etoolbox} % Removes frame numbers for appendix slides \apptocmd{\appendix}{% \beamer@htfshowframenrsfalse }{}{} \fi % REQUIREMENTS FOR SOME "FUNNY STUFF" ----------------------------------------------------------------------------------------------------------- \ifbeamer@htffunnystuff % Frame numbering in %: requirements, package settings, variables, commands \RequirePackage{calc} \RequirePackage[addmissingzero,autolanguage,nosepfour]{numprint} \npdefunit{percent}{\%}{1} \newlength{\progress} \newcommand{\updateprogress}{\setlength{\progress}{100pt*\ratio{\insertframenumber pt}{\inserttotalframenumber pt}}} \fi % TEMPLATES: TITLE ------------------------------------------------------------------------------------------------------------------------------ \defbeamertemplate*{htf-title}{none}{} \defbeamertemplate*{htf-title}{short}{\insertshorttitle} \defbeamertemplate*{htf-title}{long}{\inserttitle} % TEMPLATES: AUTHOR / INSTITUTE ----------------------------------------------------------------------------------------------------------------- \defbeamertemplate*{htf-authinst}{none}{} \defbeamertemplate*{htf-authinst}{onlyauth}{\insertshortauthor} \defbeamertemplate*{htf-authinst}{onlyinst}{\insertshortinstitute} \defbeamertemplate*{htf-authinst}{instpths}{\insertshortauthor\ifx\beamer@shortinstitute\@empty\else~~(\insertshortinstitute)\fi} \defbeamertemplate*{htf-authinst}{authpths}{\insertshortinstitute\ifx\beamer@shortauthor\@empty\else~~(\insertshortauthor)\fi} \defbeamertemplate*{htf-authinst}{bothcmma}{\insertshortauthor\ifx\beamer@shortinstitute\@empty\else,~\insertshortinstitute\fi} % TEMPLATES: DATE ------------------------------------------------------------------------------------------------------------------------------- \defbeamertemplate*{htf-date}{none}{} \defbeamertemplate*{htf-date}{short}{\insertshortdate} \defbeamertemplate*{htf-date}{long}{\insertdate} % TEMPLATES: FRAME NUMBERS ---------------------------------------------------------------------------------------------------------------------- \defbeamertemplate*{htf-framenrs}{none}{} \defbeamertemplate*{htf-framenrs}{counter}{\insertframenumber} \defbeamertemplate*{htf-framenrs}{fraction}{\insertframenumber~/~\inserttotalframenumber} \ifbeamer@htffunnystuff \defbeamertemplate*{htf-framenrs}{percent}{\updateprogress\nprounddigits{0}\lenprint[percent]{\progress}} \fi % TEMPLATES: AUTHOR-TITLE-SEPERATOR ------------------------------------------------------------------------------------------------------------- \defbeamertemplate*{htf-atsep}{colon}{:~~~~} \defbeamertemplate*{htf-atsep}{comma}{,~} \defbeamertemplate*{htf-atsep}{space}{~~~~~~~~~~} % FOOTLINE DEFINITIONS -------------------------------------------------------------------------------------------------------------------------- % No footline \defbeamertemplate*{footline}{htf-none}{} % One column \defbeamertemplate*{footline}{htf-onecol}{% \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex,leftskip=.3cm,rightskip=.3cm]{palette primary}% \usebeamerfont{author in head/foot} \usebeamertemplate{htf-authinst}% % \beamer@htfinsertsepfalse \ifbeamer@htfcheckauth\ifx\beamer@shortauthor\@empty\else\beamer@htfinsertseptrue\fi\fi \ifbeamer@htfcheckinst\ifx\beamer@shortinstitute\@empty\else\beamer@htfinsertseptrue\fi\fi % \ifx\beamer@shorttitle\@empty \beamer@htfinsertsepfalse \fi \ifbeamer@htfnotitle \beamer@htfinsertsepfalse \fi % \ifbeamer@htfinsertsep\usebeamertemplate{htf-atsep}\fi % \usebeamerfont{title in head/foot} \usebeamertemplate{htf-title} \hfill \usebeamercolor{date in head/foot} \usebeamertemplate{htf-date} % Dummy space for frame numbers \ifbeamer@htfshowframenrs \hspace{5.75em} \fi \end{beamercolorbox}% \ifbeamer@htfshowframenrs \vspace{-3.25ex} \hfill% \begin{beamercolorbox}[wd=6.25em,ht=2.25ex,dp=1ex,right,rightskip=.3cm]{palette primary} \usebeamertemplate{htf-framenrs} \end{beamercolorbox} \fi} % Two columns \defbeamertemplate*{footline}{htf-twocols}{% \leavevmode% \hbox{\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm]{author in head/foot}% \usebeamerfont{author in head/foot}\usebeamertemplate{htf-date}\hfill\usebeamertemplate{htf-authinst} \end{beamercolorbox}% \begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm]{title in head/foot}% \usebeamerfont{title in head/foot}\usebeamertemplate{htf-title}\hfill \ifbeamer@htfshowframenrs \usebeamertemplate{htf-framenrs} \fi \end{beamercolorbox}}% \vskip0pt} % Three columns \defbeamertemplate*{footline}{htf-threecols}{ \leavevmode% \hbox{% \begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,left,leftskip=.3cm]{author in head/foot}% \usebeamerfont{author in head/foot}\usebeamertemplate{htf-authinst} \end{beamercolorbox}% \begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}% \usebeamerfont{title in head/foot}\usebeamertemplate{htf-title} \end{beamercolorbox}% \begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,right,rightskip=.3cm]{date in head/foot}% \usebeamerfont{date in head/foot}\usebeamertemplate{htf-date}% % Dummy space for frame numbers \ifbeamer@htfshowframenrs \hspace{5.75em} \fi \end{beamercolorbox}% \ifbeamer@htfshowframenrs% \hspace{-6.25em}% \begin{beamercolorbox}[wd=6.25em,ht=2.25ex,dp=1ex,right,rightskip=.3cm]{date in head/foot}% \usebeamertemplate{htf-framenrs} \end{beamercolorbox}% \fi}% \vskip0pt} % CONFIGURATION COMMANDS ------------------------------------------------------------------------------------------------------------------------ % Internal commands setting all variables of a certain template to "false" \newcommand{\htfcleartitle}{% \beamer@htfnotitlefalse \beamer@htfshorttitlefalse \beamer@htflongtitlefalse} \newcommand{\htfclearauthinst}{% \beamer@htfnoauthinstfalse \beamer@htfonlyauthorfalse \beamer@htfonlyinstitutefalse \beamer@htfinstitutepthsfalse \beamer@htfauthorpthsfalse \beamer@htfauthinstfalse} \newcommand{\htfcleardate}{% \beamer@htfnodatefalse \beamer@htfshortdatefalse \beamer@htflongdatefalse} \newcommand{\htfclearframenrs}{% \beamer@htfnoframenrsfalse \beamer@htfcounterframenrsfalse \beamer@htffractionframenrsfalse \beamer@htfpercentframenrsfalse \beamer@htfshowframenrsfalse} \newcommand{\htfclearsep}{% \beamer@htfcolonsepfalse \beamer@htfcommasepfalse \beamer@htfsepspacefalse} \newcommand{\htfclearfootline}{% \beamer@htfonecolfootlinefalse \beamer@htftwocolsfootlinefalse \beamer@htfthreecolsfootlinefalse \beamer@htfnofootlinefalse} % Commands switching the title template \newcommand{\htfnotitle}{ \htfcleartitle \beamer@htfnotitletrue} \newcommand{\htfshorttitle}{ \htfcleartitle \beamer@htfshorttitletrue} \newcommand{\htflongtitle}{ \htfcleartitle \beamer@htflongtitletrue} % Commands switching the author/institute template \newcommand{\htfnoauthinst}{ \htfclearauthinst \beamer@htfnoauthinsttrue} \newcommand{\htfonlyauthor}{ \htfclearauthinst \beamer@htfonlyauthortrue} \newcommand{\htfonlyinstitute}{ \htfclearauthinst \beamer@htfonlyinstitutetrue} \newcommand{\htfinstitutepths}{ \htfclearauthinst \beamer@htfinstitutepthstrue} \newcommand{\htfauthorpths}{ \htfclearauthinst \beamer@htfauthorpthstrue} \newcommand{\htfauthinst}{ \htfclearauthinst \beamer@htfauthinsttrue} % Commands switching the date template \newcommand{\htfnodate}{ \htfcleardate \beamer@htfnodatetrue} \newcommand{\htfshortdate}{ \htfcleardate \beamer@htfshortdatetrue} \newcommand{\htflongdate}{ \htfcleardate \beamer@htflongdatetrue} % Commands switching the frame numbering template \newcommand{\htfnoframenrs}{ \htfclearframenrs \beamer@htfnoframenrstrue} \newcommand{\htfcounterframenrs}{ \htfclearframenrs \beamer@htfcounterframenrstrue \beamer@htfshowframenrstrue} \newcommand{\htffractionframenrs}{ \htfclearframenrs \beamer@htffractionframenrstrue \beamer@htfshowframenrstrue} \newcommand{\htfpercentframenrs}{ \htfclearframenrs \beamer@htfpercentframenrstrue \beamer@htfshowframenrstrue} % Commands switching the author/title separator template \newcommand{\htfcolonsep}{ \htfclearsep \beamer@htfcolonseptrue} \newcommand{\htfcommasep}{ \htfclearsep \beamer@htfcommaseptrue} \newcommand{\htfsepspace}{ \htfclearsep \beamer@htfsepspacetrue} % HACKING COMMAND ------------------------------------------------------------------------------------------------------------------------------- \newcommand{\hackthefootline}{% \htfprintmessage % Selects footline layout \ifbeamer@htfonecolfootline \setbeamertemplate{footline}[htf-onecol] \else \ifbeamer@htftwocolsfootline \setbeamertemplate{footline}[htf-twocols] \else \ifbeamer@htfthreecolsfootline \setbeamertemplate{footline}[htf-threecols] \else \setbeamertemplate{footline}[htf-none] \fi \fi \fi % Title \ifbeamer@htfnotitle \setbeamertemplate{htf-title}[none] \fi \ifbeamer@htfshorttitle \setbeamertemplate{htf-title}[short] \fi \ifbeamer@htflongtitle \setbeamertemplate{htf-title}[long] \fi % Author/Institute \ifbeamer@htfnoauthinst \setbeamertemplate{htf-authinst}[none] \htfchecknone \fi \ifbeamer@htfonlyauthor \setbeamertemplate{htf-authinst}[onlyauth] \htfcheckauthor \fi \ifbeamer@htfonlyinstitute \setbeamertemplate{htf-authinst}[onlyinst] \htfcheckinstit \fi \ifbeamer@htfinstitutepths \setbeamertemplate{htf-authinst}[instpths] \htfcheckboth \fi \ifbeamer@htfauthorpths \setbeamertemplate{htf-authinst}[authpths] \htfcheckboth \fi \ifbeamer@htfauthinst \setbeamertemplate{htf-authinst}[bothcmma] \htfcheckboth \fi % Date \ifbeamer@htfnodate \setbeamertemplate{htf-date}[none] \fi \ifbeamer@htfshortdate \setbeamertemplate{htf-date}[short] \fi \ifbeamer@htflongdate \setbeamertemplate{htf-date}[long] \fi % Frame numbers \ifbeamer@htfnoframenrs \setbeamertemplate{htf-framenrs}[none] \fi \ifbeamer@htfcounterframenrs \setbeamertemplate{htf-framenrs}[counter] \fi \ifbeamer@htffractionframenrs \setbeamertemplate{htf-framenrs}[fraction] \fi \ifbeamer@htfpercentframenrs \ifbeamer@htffunnystuff \setbeamertemplate{htf-framenrs}[percent] \else \PackageError{hackthefootline}{For using percent frame numbers don't pass the nofun option}{} \fi \fi % Author--Title--separators \ifbeamer@htfcolonsep \setbeamertemplate{htf-atsep}[colon] \fi \ifbeamer@htfcommasep \setbeamertemplate{htf-atsep}[comma] \fi \ifbeamer@htfsepspace \setbeamertemplate{htf-atsep}[space] \fi } % PERFORMS THE "INITIAL HACK" AT BEGINNING A DOCUMENT ------------------------------------------------------------------------------------------- \AtBeginDocument{ % Load default settings ... \ifbeamer@htfonecolfootline \htfonecolfootlinedefault \else \ifbeamer@htftwocolsfootline \htftwocolsfootlinedefault \else \ifbeamer@htfthreecolsfootline \htfthreecolsfootlinedefault \else \htfnofootlinedefault \fi \fi \fi % ... and perform the hack \hackthefootline} % END OF FILE ----------------------------------------------------------------------------------------------------------------------------------- \mode \endinput