diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/beamer-contrib/hackthefootline/hackthefootline.sty |
Initial commit
Diffstat (limited to 'macros/latex/contrib/beamer-contrib/hackthefootline/hackthefootline.sty')
-rw-r--r-- | macros/latex/contrib/beamer-contrib/hackthefootline/hackthefootline.sty | 397 |
1 files changed, 397 insertions, 0 deletions
diff --git a/macros/latex/contrib/beamer-contrib/hackthefootline/hackthefootline.sty b/macros/latex/contrib/beamer-contrib/hackthefootline/hackthefootline.sty new file mode 100644 index 0000000000..14d83c2814 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/hackthefootline/hackthefootline.sty @@ -0,0 +1,397 @@ +%% This is file 'hackthefootline.sty', Version 2018-01-29 +%% Copyright 2017-18 Sebastian Friedl <sfr682k@t-online.de> +%% +%% 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, hackthefootline-examples.tex and +%% hackthefootline-doc.tex +%% +%% ------------------------------------------------------------------------------------------- +%% +%% The hackthefootline package is a tool providing arbitrary footline selection and +%% configuration 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}[2018/01/29 hackthefootline: Arbitrary footline selection and configuration for LaTeX beamer's standard themes] +\mode<presentation> + +\RequirePackage{ifthen} +\RequirePackage{pgfkeys} + +\newcommand{\htfprintmessage}{% + \typeout{} + \typeout{========================================} + \typeout{THE FOOTLINE HAS BEEN TAKEN OVER} + \typeout{by the hackthefootline package} + \typeout{Version 2018/01/29} + \typeout{} + \typeout{(c) 2017-18 Sebastian Friedl} + \typeout{Licensed under LPPL 1.3c or later} + \typeout{========================================} + \typeout{}} + + + +% PACKAGE OPTIONS AND VARIABLES -- INCLUDES AUXILIARY STUFF ------------------------------------------------------------------------------------- + +\DeclareOptionBeamer{onecol}{% + \htfconfig{title=short, authinst=both, date=none, framenrs=fraction, atsep=colon}% + \AtBeginDocument{\htfconfig{cols=one}}\htfprintmessage} +\DeclareOptionBeamer{twocols}{% + \htfconfig{title=short, authinst=onlyauthor, date=none, framenrs=none, atsep=colon}% + \AtBeginDocument{\htfconfig{cols=two}}\htfprintmessage} +\DeclareOptionBeamer{threecols}{% + \htfconfig{title=short, authinst=instpths, date=short, framenrs=fraction, atsep=colon}% + \AtBeginDocument{\htfconfig{cols=three}}\htfprintmessage} + +\newif\ifbeamer@htfcountappendixframes +\beamer@htfcountappendixframesfalse +\DeclareOptionBeamer{countappendixframes}{\beamer@htfcountappendixframestrue} + +\newif\ifbeamer@htffunnystuff +\beamer@htffunnystufftrue +\DeclareOptionBeamer{nofun}{\beamer@htffunnystufffalse} + + + +% 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} + +% Variables +\newif\ifbeamer@htfnotitle +\newif\ifbeamer@htfshowframenrs + +% Own replacement for \beamer@inappendix; required for compatibility reasons +\newif\ifbeamer@htfinsideappendix +\beamer@htfinsideappendixfalse + + + +% TEMPLATES ------------------------------------------------------------------------------------------------------------------------------------- +% Please **always** use \defbeamertemplate **without asterisk**!! + +% Title +\defbeamertemplate{htf-title}{none}{} +\defbeamertemplate{htf-title}{short}{\insertshorttitle} +\defbeamertemplate{htf-title}{long}{\inserttitle} + +% 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} + +% Date +\defbeamertemplate{htf-date}{none}{} +\defbeamertemplate{htf-date}{short}{\insertshortdate} +\defbeamertemplate{htf-date}{long}{\insertdate} + +% Frame Numbers +\defbeamertemplate{htf-framenrs}{none}{} +\defbeamertemplate{htf-framenrs}{counter}{\insertframenumber} +\defbeamertemplate{htf-framenrs}{fraction}{% + \ifbeamer@htfcountappendixframes{\insertframenumber~/~\inserttotalframenumber}% + \else% + \ifx\insertmainframenumber\@undefined{\insertframenumber~/~\inserttotalframenumber}% + \else% + % beamer v3.49 and later: detect whether appendix has been entered and use the required templates and use internal cmds + \ifbeamer@htfinsideappendix{\insertframenumberinappendix~/~\insertappendixframenumber}% + \else{\insertframenumber~/~\insertmainframenumber}% + \fi% + \fi% + \fi} +\ifbeamer@htffunnystuff + \defbeamertemplate{htf-framenrs}{percent}{\htfupdateprogress\nprounddigits{0}\lenprint[htfpercent]{\htfprogress}} +\fi + + +% Author-Title-Seperator +\defbeamertemplate{htf-atsep}{colon}{:~~~~} +\defbeamertemplate{htf-atsep}{comma}{,~} +\defbeamertemplate{htf-atsep}{space}{~~~~~~~~~~} + + + +% FOOTLINE DEFINITIONS -------------------------------------------------------------------------------------------------------------------------- + +% Auxiliary length +\newlength{\htfframenrboxwidth}% + +% 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} + % + % Measure the largest required space when printing frame numbers + \newbox\htfpagenumbox% + \newbox\htfpercframenumbox% + \setbox\htfpagenumbox=\hbox{0\inserttotalframenumber~/~0\inserttotalframenumber}% + \setbox\htfpercframenumbox=\hbox{100\,\%}% + \ifthenelse{\lengthtest{\wd\htfpagenumbox > \wd\htfpercframenumbox}}% + {\setlength{\htfframenrboxwidth}{\wd\htfpagenumbox}}% + {\setlength{\htfframenrboxwidth}{\wd\htfpercframenumbox}}% + % + \ifbeamer@htfshowframenrs \hspace{\htfframenrboxwidth}\hspace{.2\htfframenrboxwidth}~\fi% + \end{beamercolorbox}% + \ifbeamer@htfshowframenrs + \vspace{-3.25ex} + \hfill% + \addtolength{\htfframenrboxwidth}{.3cm}% + \addtolength{\htfframenrboxwidth}{2em}% + \addtolength{\htfframenrboxwidth}{.5\htfframenrboxwidth}% + \hspace{-1.3\htfframenrboxwidth}% + \begin{beamercolorbox}[wd=1.3\htfframenrboxwidth,ht=2.25ex,dp=1ex,right,rightskip=.3cm]{bg}% + % The color *has* to be set here; otherwise, the page number box will cover parts of the date + \usebeamercolor[fg]{date in head/foot}\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}% + % + % Measure the largest required space when printing frame numbers + \newbox\htfpagenumbox% + \newbox\htfpercframenumbox% + \setbox\htfpagenumbox=\hbox{0\inserttotalframenumber~/~0\inserttotalframenumber}% + \setbox\htfpercframenumbox=\hbox{100\,\%}% + \ifthenelse{\lengthtest{\wd\htfpagenumbox > \wd\htfpercframenumbox}}% + {\setlength{\htfframenrboxwidth}{\wd\htfpagenumbox}}% + {\setlength{\htfframenrboxwidth}{\wd\htfpercframenumbox}}% + % + \ifbeamer@htfshowframenrs \hspace{\htfframenrboxwidth}\hspace{.2\htfframenrboxwidth}~\fi% + \end{beamercolorbox}% + \ifbeamer@htfshowframenrs% + \addtolength{\htfframenrboxwidth}{.3cm}% + \addtolength{\htfframenrboxwidth}{2em}% + \addtolength{\htfframenrboxwidth}{.5\htfframenrboxwidth}% + \hspace{-1.3\htfframenrboxwidth}% + \begin{beamercolorbox}[wd=1.3\htfframenrboxwidth,ht=2.25ex,dp=1ex,right,rightskip=.3cm]{bg}% + % The color *has* to be set here; otherwise, the page number box will cover parts of the date + \usebeamercolor[fg]{date in head/foot}\usebeamertemplate{htf-framenrs} + \end{beamercolorbox}% + \fi}% + \vskip0pt} + + + +% PGF KEYS STORING THE CURRENT FOOTLINE CONFIGURATION ------------------------------------------------------------------------------------------- + +\pgfkeys{/hackthefootline/cols/.cd, + .is choice, .default=none, + one/.code={\setbeamertemplate{footline}[htf-onecol]\beamer@calculateheadfoot}, + two/.code={\setbeamertemplate{footline}[htf-twocols]\beamer@calculateheadfoot}, + three/.code={\setbeamertemplate{footline}[htf-threecols]\beamer@calculateheadfoot}, + none/.code={% + \htfconfig{framenrs=none}% + \setbeamertemplate{footline}[htf-none]% + \beamer@calculateheadfoot}, +} + +\pgfkeys{/hackthefootline/title/.cd, + .is choice, .default=none, + short/.code={\setbeamertemplate{htf-title}[short]\beamer@htfnotitlefalse}, + long/.code={\setbeamertemplate{htf-title}[long]\beamer@htfnotitlefalse}, + none/.code={\setbeamertemplate{htf-title}[none]\beamer@htfnotitletrue}, +} + +\pgfkeys{/hackthefootline/authinst/.cd, + .is choice, .default=none, + onlyauthor/.code={\setbeamertemplate{htf-authinst}[onlyauth]\htfcheckauthor}, + onlyinst/.code={\setbeamertemplate{htf-authinst}[onlyinst]\htfcheckinstit}, + instpths/.code={\setbeamertemplate{htf-authinst}[instpths]\htfcheckboth}, + authpths/.code={\setbeamertemplate{htf-authinst}[authpths]\htfcheckboth}, + both/.code={\setbeamertemplate{htf-authinst}[bothcmma]\htfcheckboth}, + none/.code={\setbeamertemplate{htf-authinst}[none]\htfchecknone}, +} + +\pgfkeys{/hackthefootline/date/.cd, + .is choice, .default=none, + short/.code={\setbeamertemplate{htf-date}[short]}, + long/.code={\setbeamertemplate{htf-date}[long]}, + none/.code={\setbeamertemplate{htf-date}[none]} +} + +\pgfkeys{/hackthefootline/framenrs/.cd, + .is choice, .default=none, + counter/.code={\setbeamertemplate{htf-framenrs}[counter]\beamer@htfshowframenrstrue}, + fraction/.code={\setbeamertemplate{htf-framenrs}[fraction]\beamer@htfshowframenrstrue}, + percent/.code={% + \ifbeamer@htffunnystuff \setbeamertemplate{htf-framenrs}[percent]% + \else \PackageError{hackthefootline}{Do not pass the nofun option when using percent frame numbers!}{}% + \fi + \beamer@htfshowframenrstrue% + }, + none/.code={\setbeamertemplate{htf-framenrs}[none]\beamer@htfshowframenrsfalse}, +} + +\pgfkeys{/hackthefootline/atsep/.cd, + .is choice, .default=colon, + colon/.code={\setbeamertemplate{htf-atsep}[colon]}, + comma/.code={\setbeamertemplate{htf-atsep}[comma]}, + space/.code={\setbeamertemplate{htf-atsep}[space]}, +} + +% Configruation Command +\newcommand{\htfconfig}[1]{\pgfkeys{/hackthefootline/.cd,#1}} + + + +% FORMER CONFIGURATION COMMANDS (OBSOLETE!!) ---------------------------------------------------------------------------------------------------- + +% These configuration commands have been introduced in the initial release of this package and were implemented very ineffective. +% Since using pgfkeys for switching the templates, the \htfconfig command has been introduced for easier footline configuration. +% All commands defined in this section obsolete now and should be replaced by \htfconfig, since they may be removed soon. + +% Obsolete commands for switching templates +\newcommand{\htfnotitle}{\htfObsoleteCMD\htfconfig{title=none}} +\newcommand{\htfshorttitle}{\htfObsoleteCMD\htfconfig{title=short}} +\newcommand{\htflongtitle}{\htfObsoleteCMD\htfconfig{title=none}} +\newcommand{\htfnoauthinst}{\htfObsoleteCMD\htfconfig{authinst=none}} +\newcommand{\htfonlyauthor}{\htfObsoleteCMD\htfconfig{authinst=onlyauthor}} +\newcommand{\htfonlyinstitute}{\htfObsoleteCMD\htfconfig{authinst=onlyinst}} +\newcommand{\htfinstitutepths}{\htfObsoleteCMD\htfconfig{authinst=instpths}} +\newcommand{\htfauthorpths}{\htfObsoleteCMD\htfconfig{authinst=authpths}} +\newcommand{\htfauthinst}{\htfObsoleteCMD\htfconfig{authinst=both}} +\newcommand{\htfnodate}{\htfObsoleteCMD\htfconfig{date=none}} +\newcommand{\htfshortdate}{\htfObsoleteCMD\htfconfig{date=short}} +\newcommand{\htflongdate}{\htfObsoleteCMD\htfconfig{date=long}} +\newcommand{\htfnoframenrs}{\htfObsoleteCMD\htfconfig{framenrs=none}} +\newcommand{\htfcounterframenrs}{\htfObsoleteCMD\htfconfig{framenrs=counter}} +\newcommand{\htffractionframenrs}{\htfObsoleteCMD\htfconfig{framenrs=fraction}} +\newcommand{\htfpercentframenrs}{\htfObsoleteCMD\htfconfig{framenrs=percent}} +\newcommand{\htfcolonsep}{\htfObsoleteCMD\htfconfig{atsep=colon}} +\newcommand{\htfcommasep}{\htfObsoleteCMD\htfconfig{atsep=comma}} +\newcommand{\htfsepspace}{\htfObsoleteCMD\htfconfig{atsep=space}} + +% This command was used to apply changes, but is useless now. +\newcommand{\hackthefootline}{% + \PackageWarning{hackthefootline}{% + The \protect\hackthefootline command is obsolete and may be removed soon. Consider using \noexpand\htfconfig instead}} + +% A shorthand for printing an "this command is obsolete" warning +\newcommand{\htfObsoleteCMD}{% + \PackageWarning{hackthefootline}{% + The old \noexpand\htf... commands are obsolete and may be removed soon. Consider using \noexpand\htfconfig instead} +} + + + +% PROCESS OPTIONS ------------------------------------------------------------------------------------------------------------------------------- +% This *has* to be done here, otherwise mysterious things will happen ... +% and too many packages will be required ... + +\ProcessOptionsBeamer + + + +% ACTIONS FOR NOT COUNTING APPENDIX FRAMES ------------------------------------------------------------------------------------------------------ + +\ifbeamer@htfcountappendixframes\else + % Required packages + \ifx\insertmainframenumber\@undefined\RequirePackage{appendixnumberbeamer}\fi % only beamer v3.48 and earlier + \RequirePackage{etoolbox} + + % Removes frame numbers for appendix slides + \apptocmd{\appendix}{% + \htfconfig{framenrs=none} + \beamer@htfinsideappendixtrue + }{}{} +\fi + + + +% REQUIREMENTS FOR SOME "FUNNY STUFF" ----------------------------------------------------------------------------------------------------------- + +\ifbeamer@htffunnystuff + % Frame numbering in %: requirements, package settings, variables, commands + \RequirePackage{calc} + \RequirePackage[addmissingzero,autolanguage,nosepfour]{numprint} + \npdefunit{htfpercent}{\%}{1} + \newlength{\htfprogress} + \def\htfupdateprogress{% + \ifbeamer@htfcountappendixframes\setlength{\htfprogress}{100pt*\ratio{\insertframenumber pt}{\inserttotalframenumber pt}}% + \else% + \ifx\insertmainframenumber\@undefined\setlength{\htfprogress}{100pt*\ratio{\insertframenumber pt}{\inserttotalframenumber pt}}% + \else% + \ifbeamer@htfinsideappendix\setlength{\htfprogress}{100pt*\ratio{\insertframenumberinappendix pt}{\insertappendixframenumber pt}}% + \else\setlength{\htfprogress}{100pt*\ratio{\insertframenumber pt}{\insertmainframenumber pt}}% + \fi% + \fi% + \fi} +\fi + + + +% END OF FILE ----------------------------------------------------------------------------------------------------------------------------------- + +\mode<all> +\endinput
\ No newline at end of file |