Files
awesome-beamer/beamerthemeawesome.sty
schrc3b6 9313259306 Fix title recursion for frame breaks
If allowframebreaks is used. The Title is repeated n times, with n the
number of used framebreaks. When allowframebreaks is used a short title for
the frame is automatically added. Since this theme renews the frametitle
command and appends the short title to the frametitle, the frametitle is
duplicated for each framebreak resulting in a slide with 4 titles on the
third framebreak.

This patch simply checks for the breakcount and if this is a frame with
multiple breaks the original frametitle command function is used.
2024-02-21 18:47:38 +01:00

545 lines
16 KiB
TeX

\ProvidesPackage{awesome-beamer-theme}[]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=awesome,prefix=awesome@}
\newif\ifawesome@english@
\DeclareVoidOption{english}{\awesome@english@true}
\DeclareVoidOption{german}{\awesome@english@false}
\DeclareBoolOption{notoc}
\DeclareBoolOption{secslide}
\DeclareBoolOption{subsecslide}
\DeclareDefaultOption{\PassOptionsToPackage{\CurrentOption}{smile}}
\ProcessKeyvalOptions*
\ifawesome@english@\RequirePackage[english]{babel}\else\RequirePackage[ngerman]{babel}\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{fontspec}
\RequirePackage{calc}
\RequirePackage{microtype}
\RequirePackage{etoolbox}
\RequirePackage{tcolorbox}
\tcbuselibrary{skins}
\RequirePackage[
tikz,
htmlunderline,
footnote,
hyperref,
pdftitle={\noexpand\inserttitle},
pdfauthor={\noexpand\insertauthor},
pdfsubject={\noexpand\inserttitle}
]{smile}
\usetikzlibrary{overlay-beamer-styles,decorations.markings}
\tikzset{
node distance = 5mm,
invisible/.style={opacity=0},
muted/.style={opacity=0.3},
visible on/.style={alt={#1{}{invisible}}},
hidden on/.style={alt={#1{invisible}{}}},
muted on/.style={alt={#1{muted}{}}},
unmuted on/.style={alt={#1{}{muted}}},
alt/.code args={<#1>#2#3}{%
\alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
},
}
\RequirePackage[
backend=biber,
style=alphabetic,
sorting=ynt
]{biblatex}
\RequirePackage[strict, autostyle]{csquotes}
\nocite{*}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\maketitle{
\begin{frame}[noframenumbering,plain]
\titlepage
\end{frame}
\ifawesome@notoc\else
\begin{frame}{Agenda}
\tableofcontents
\end{frame}
\fi
}
\let\oldft\frametitle
\renewcommand\frametitle[2][]{%
\ifx\relax#1\relax\oldft{#2}\else%
\ifnum\beamer@autobreakcount>0\oldft[#1]{#2}\else%
\oldft{#2\hfill\normalfont\large\color{darkgray}\raisebox{0.3ex}{#1}}%
\fi%
\fi%
}
\BeforeBeginEnvironment{tabular}{\def\arraystretch{1.1}\rowcolors{2}{lightgray}{white}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcounter{framesinsection}
\newcounter{framesinsubsection}
\counterwithin*{framesinsection}{section}
\counterwithin*{framesinsubsection}{subsection}
\def\stepframe{%
\ifbeamer@isfragile%
\stepcounter{framesinsection}%
\stepcounter{framesinsubsection}%
\else%
\ifbeamer@noframenumbering\else%
\stepcounter{framesinsection}%
\stepcounter{framesinsubsection}%
\fi%
\fi%
\ifnum\theframesinsection=0\setcounter{framesinsection}{1}\fi%
\ifnum\theframesinsubsection=0\setcounter{framesinsubsection}{1}\fi%
}
\BeforeBeginEnvironment{frame}{\stepframe}
\pretocmd\againframe{\stepframe}{}{}
\def\refreshcountsinaux{%
\immediate\write\@auxout{\global\noexpand\@namedef{s@totalsubsectionframes-\arabic{section}-\arabic{subsection}}{\theframesinsubsection}}%
\immediate\write\@auxout{\global\noexpand\@namedef{s@totalsectionframes-\arabic{section}}{\theframesinsection}}%
}
\newcounter{secinc}
\pretocmd\section{%
% At this point, the section command has not yet incremented the section counter, so we need to do this by ourselves
\setcounter{secinc}{\thesection + 1}%
\refreshcountsinaux%
\immediate\write\@auxout{\global\noexpand\@namedef{s@frameatsecstart-\arabic{secinc}}{\insertframenumber}}%
}{}{}
\newcounter{subsecinc}
\pretocmd\subsection{%
% At this point, the subsection command has not yet incremented the subsection counter, so we need to do this by ourselves
\setcounter{subsecinc}{\thesubsection + 1}%
\refreshcountsinaux%
\immediate\write\@auxout{\global\noexpand\@namedef{s@frameatsubsecstart-\arabic{section}-\arabic{subsecinc}}{\insertframenumber}}%
}{}{}
\AtEndDocument{\refreshcountsinaux}
\def\framespersection{%
\ifcsdef{s@totalsectionframes-\arabic{section}}{%
\csname s@totalsectionframes-\arabic{section}\endcsname%
}{0}%
}
\def\framespersubsection{%
\ifcsdef{s@totalsubsectionframes-\arabic{section}-\arabic{subsection}}{%
\csname s@totalsubsectionframes-\arabic{section}-\arabic{subsection}\endcsname%
}{0}%
}
\def\insertsectionstartframe{%
\ifcsdef{s@frameatsecstart-\arabic{section}}{%
\csname s@frameatsecstart-\arabic{section}\endcsname%
}{0}%
}
\def\insertsubsectionstartframe{%
\ifcsdef{s@frameatsubsecstart-\arabic{section}-\arabic{subsection}}{%
\csname s@frameatsubsecstart-\arabic{section}-\arabic{subsection}\endcsname%
}{0}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setbeamercolor{alerted text}{fg=accent}
\setbeamercolor{subtitle}{fg=darkgray}
\setbeamercolor{frametitle}{fg=black}
\setbeamercolor{framesubtitle}{fg=darkgray}
\setbeamercolor{details}{fg=black}
\setbeamercolor{author}{fg=black}
\setbeamercolor{section number projected}{bg=black, fg=accent}
\setbeamercolor{subsection number projected}{fg=lightgray, fg=accent}
\setbeamercolor{structure}{fg=black}
\setbeamercolor{normal text}{fg=black}
\setbeamercolor{separator}{fg=accent, bg=accent}
\setbeamercolor{footline}{bg=lightgray}
\setbeamercolor{footlineright}{fg=white, bg=accent}
\setbeamercolor{block body}{bg=lightgray}
\setbeamercolor{block title}{bg=black, fg=white}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setsansfont[
Ligatures=TeX,
BoldFont={* Medium},
]{Fira Sans}
\setmonofont[
Path = ./fonts/,
Scale = .9,
Extension = .ttf,
Contextuals=Alternate,
BoldFont={*-Bold},
UprightFont={*-Regular},
]{Fira Code}
\setbeamerfont{title}{
size=\LARGE,
shape=\bfseries\scshape
}
\setbeamerfont{subtitle}{
size=\large,
shape=\normalfont
}
\setbeamerfont{author}{
size=\normalsize,
shape=\normalfont
}
\setbeamerfont{details}{
size=\footnotesize,
shape=\normalfont
}
\setbeamerfont{footline}{
size=\tiny,
shape=\normalfont
}
\setbeamerfont{footnote}{
size=\tiny,
shape=\normalfont
}
\setbeamerfont{frametitle}{
size=\LARGE,
shape=\bfseries\scshape
}
\setbeamerfont{framesubtitle}{
size=\normalsize,
shape=\normalfont
}
\setbeamerfont{block title}{
size=\normalfont,
shape=\strut
}
\setbeamerfont{blockdef}{
size=\large,
shape=\bfseries
}
\setbeamerfont{description item}{
shape=\bfseries
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setbeamersize{description width=0.5cm}
\setbeamersize{sidebar width left=0.15\paperwidth}
\setbeamertemplate{caption}{\insertcaption}
\setbeamertemplate{blocks}[rounded][shadow=false]
\setbeamertemplate{itemize item}[circle]
\setbeamertemplate{itemize subitem}[circle]
\addtobeamertemplate{frametitle continuation}{\color{gray}(}{)}
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{headline}{}
\setbeamertemplate{section in toc}{%
\usebeamercolor[fg]{section number projected}\inserttocsectionnumber.%
\usebeamercolor[fg]{normal text}~\inserttocsection%
}
\newenvironment{wide}{\begingroup\leavevmode%
\hspace*{-2cm}\fboxsep\z@\minipage{\linewidth+2cm}%
}{\endminipage\endgroup}
\setbeamertemplate{subsection in toc}{%
\mbox{\hskip2em%
\usebeamercolor[fg]{section number projected}\inserttocsectionnumber.%
\usebeamercolor[fg]{subsection number projected}\textsubscript{\inserttocsubsectionnumber}%
\usebeamercolor[fg]{normal text}~\inserttocsubsection%
}%
}
\setbeamertemplate{separator}{%
\usebeamercolor{separator}\textcolor{fg}{\rule{.7\textwidth}{\smile@linewidth}}%
}
\setbeamertemplate{frametitle}{%
\vspace{1em}\hspace{-\beamer@leftsidebar}\begin{beamercolorbox}[wd=\beamer@leftsidebar]{frametitle}%
\ifx\insertsection\empty\else%
\color{accent}\thesection.%
\ifx\insertsubsection\empty%
\ifnum\framespersection>1%
\color{black!25!white}\scalebox{.7}{\theframesinsection}%
\fi%
\else%
\thesubsection.\color{black!25!white}%
\ifnum\framespersubsection>1%
\scalebox{.7}{\theframesinsubsection}%
\fi%
\fi%
\fi
\end{beamercolorbox}%
\begin{beamercolorbox}{frametitle}%
\insertframetitle%
\end{beamercolorbox}
\ifx\insertframesubtitle\empty\else%
\begin{beamercolorbox}{framesubtitle}%
\usebeamerfont{subtitle}\insertframesubtitle%
\end{beamercolorbox}\fi%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newtcolorbox{beamerbox}[2]{boxrule=\smile@linewidth,
IfBlankTF={#2}{toprule=2mm}{title=#2},colback=#1!5!white,colframe=#1!75!black,left=0em,
lefttitle=4mm, arc=\smile@rounding, enhanced, segmentation engine=path,
segmentation style={solid, shorten >=1mm,shorten <=1mm, line width=\smile@linewidth}}
\renewenvironment{definition}[1][\empty]{%
\begin{beamerbox}{gray}{#1}%
}{\end{beamerbox}}
\renewenvironment{block}[1][]{%
\begin{beamerbox}{accent}{#1}%
}{\end{beamerbox}}
\renewenvironment{examples}[1][]{%
\begin{beamerbox}{green}{#1}%
}{\end{beamerbox}}
\renewenvironment{alertblock}[1][]{%
\begin{beamerbox}{red}{#1}%
}{\end{beamerbox}}
\ensureinfocommand{title}
\ensureinfocommand{author}
\ensureinfocommand{background}
\ensureinfocommand{email}
\ensureinfocommand{uni}
\ensureinfocommand{location}
\def\inserttitle{\ifdefined\@title\@title\fi}
\def\insertshorttitle{\ifdefined\@shorttitle\@shorttitle\fi}
\def\insertauthor{\ifdefined\@author\@author\fi}
\def\insertshortauthor{\ifdefined\@shortauthor\@shortauthor\fi}
\def\insertemail{\ifdefined\@email\href{mailto:\@email}{\@email}\fi}
\def\insertuni{\ifdefined\@uni\@uni\fi}
\def\insertlocation{\ifdefined\@location\@location\fi}
\tikzfading[
name=title page picture fading,
left color=transparent!0,
right color=transparent!100,
]
\def\ps@navigation@titlepage{\setbeamertemplate{footline}{}\@nameuse{ps@navigation}}
\newlength\lhswidth\setlength{\lhswidth}{.55\textwidth}
\newlength\titlewidth
\newlength\subtitlewidth
\newlength\maxwidth
\setbeamertemplate{title page}{\begin{wide}
\def\titlecontent{\usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle}%
\def\subtitlecontent{\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle}\insertsubtitle}%
\settowidth\titlewidth\titlecontent%
\settowidth\subtitlewidth\subtitlecontent%
\setlength\maxwidth{\ifdim\titlewidth>\subtitlewidth\titlewidth\else\subtitlewidth\fi}%
\thispagestyle{navigation@titlepage}%
\begin{minipage}{\lhswidth}
\raggedright%
\titlecontent\\
\subtitlecontent\\
\textcolor{accent}{\rule{\ifdim\maxwidth<\lhswidth\maxwidth\else\lhswidth\fi}{\smile@linewidth}}\\[2em]
\usebeamerfont{author}\usebeamercolor[fg]{author}%
\insertauthor\\
\usebeamerfont{details}\usebeamercolor[fg]{details}%
\insertemail\\[2em]
\usebeamerfont{details}\usebeamercolor[fg]{details}%
\insertinstitute\\
\insertuni\\[2em]
\insertdate
\end{minipage}
\ifdefined\@background
\begin{tikzpicture}[remember picture, overlay]
\clip (current page.south east)
-- (current page.north east)
-- ++(-5.1, 0)
-- ++(-3, -\paperheight)
-- cycle;
\node[
anchor=south east,
inner sep=0,
outer sep=0
] at (current page.south east) {
\includegraphics[height=\paperheight]{\@background}
};
\fill[
black, path fading=title page picture fading,
fading angle=-15
]
(current page.south east)
rectangle
++(-10, \dimexpr\paperheight+1cm);
\end{tikzpicture}
\fi
\end{wide}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newsavebox\footerright
\def\setfooter#1#2#3{\savebox\footerright{\color{white}\hspace{0.3cm}#3\hspace{0.3cm}}\leavevmode\hbox{%
\usebeamerfont{footline}%
\begin{beamercolorbox}[wd=\dimexpr\textwidth-\wd\footerright\relax,ht=2.5ex,dp=1ex]{footline}%
\hspace{0.3cm}#1\hfill#2\hfill\null%
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=\wd\footerright,ht=2.5ex,dp=1ex]{footlineright}%
\usebox\footerright%
\end{beamercolorbox}%
}}
\def\awesome@smalldot{\tikz[baseline=-.6ex]\node[circle,inner sep=0.16,draw=black,fill=black]{};}
\def\awesome@fulldot{\tikz[baseline=-.6ex]\node[circle,inner sep=0.32ex,draw=black,fill=black]{};}
\def\awesome@emptydot{\tikz[baseline=-.6ex]\node[circle,inner sep=0.32ex,draw=black,fill=none]{};}
\newcounter{pagenumbertolinkto}
\setbeamertemplate{footline}{%
\setfooter{\insertshortauthor}{%
\hyperlinkdocumentstart{\insertshorttitle}\hspace{.7em}\awesome@smalldot\hspace{.7em}\insertsection%
\ifx\insertsubsection\empty%
\hspace{.4em}%
\ifnum\framespersection>1%
\foreach \i in {1, ..., \framespersection}{%
\ifnum \i=\theframesinsection%
~\awesome@fulldot%
\else%
\setcounter{pagenumbertolinkto}{\i + \insertsectionstartframe}%
~\hyperlink{page:\thepagenumbertolinkto}{\awesome@emptydot}%
\fi%
}%
\fi%
\else%
\hspace{.7em}\awesome@smalldot\hspace{.7em}\insertsubsection%
\hspace{.7em}%
\ifnum\framespersubsection>1%
\foreach \i in {1, ..., \framespersubsection}{%
\ifnum \i=\theframesinsubsection%
~\awesome@fulldot%
\else%
\setcounter{pagenumbertolinkto}{\i + \insertsubsectionstartframe}%
~\hyperlink{page:\thepagenumbertolinkto}{\awesome@emptydot}%
\fi%
}%
\fi%
\fi%
}{\ifawesome@english@ Page\else Seite\fi~\insertframenumber~/~\inserttotalframenumber}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\ps@navigation@toc{%
\setbeamertemplate{footline}{\setfooter{\insertshortauthor}{\hyperlinkdocumentstart{\insertshorttitle}}{Agenda}}%
\@nameuse{ps@navigation}%
}
\def\ps@navigation@sec{%
\setbeamertemplate{footline}{%
\setfooter{\insertshortauthor}%
{\hyperlinkdocumentstart{\insertshorttitle}}%
{\ifawesome@english@ Section\else Kapitel\fi~\thesection\ifx\insertsubsection\empty\else.\thesubsection\fi}%
}%
\@nameuse{ps@navigation}%
}
\pretocmd\tableofcontents{\thispagestyle{navigation@toc}}{}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Kinda hacky, but AtBeginEnvironment does not work with beamer tex.stackexchange.com/a/436338/286979
\pretocmd\beamer@checkframetitle{%
\transfade[duration=0.1]%
\ifbeamer@isfragile%
\label{page:\insertframenumber}%
\else\ifbeamer@noframenumbering\else\hypertarget{page:\insertframenumber}{}\fi\fi%
}
\AtBeginSection[]{\ifawesome@secslide
\begin{frame}[c,noframenumbering]\thispagestyle{navigation@sec}%
\begin{wide}\centering%
\usebeamerfont{title}%
\usebeamercolor[fg]{section number projected}%
\scalebox{1.3}{ \raisebox{-1pt}{\insertsectionnumber}}.~%
\usebeamercolor[fg]{title}%
\insertsectionhead%
\end{wide}%
\end{frame}
\fi}
\AtBeginSubsection[]{\ifawesome@subsecslide
\begin{frame}[c,noframenumbering]\thispagestyle{navigation@sec}%
\begin{wide}\centering%
\usebeamerfont{title}%
\usebeamercolor[fg]{section number projected}%
\scalebox{1.3}{\raisebox{-1pt}{\insertsectionnumber}}.%
\usebeamercolor[fg]{subsection number projected}%
\textsubscript{\insertsubsectionnumber}~%
\usebeamercolor[fg]{title}%
\insertsubsectionhead%
\end{wide}%
\end{frame}
\fi}
\AtEndDocument{
{\setbeamercolor{background canvas}{bg=accent}
\begin{frame}[b,noframenumbering]\thispagestyle{navigation@titlepage}%
\begin{wide}\color{white}%
\Large\textbf{\insertauthor}\vskip0.5em\scriptsize\insertlocation,~\insertdate\hfill\insertemail%
\end{wide}%
\end{frame}}
}