metropolis_theme/beamerouterthememetropolis.dtx

258 lines
7.1 KiB
Plaintext
Raw Normal View History

2015-06-18 08:46:34 +02:00
% \iffalse meta-comment -------------------------------------------------------
% Copyright 2015 Matthias Vogelgesang and the LaTeX community. A full list of
% contributors can be found at
%
% https://github.com/matze/mtheme/graphs/contributors
%
% and the original template was based on the HSRM theme by Benjamin Weiss.
%
% This work is licensed under a Creative Commons Attribution-ShareAlike 4.0
% International License (https://creativecommons.org/licenses/by-sa/4.0/).
% ------------------------------------------------------------------------- \fi
% \iffalse
%<driver> \ProvidesFile{beamerouterthememetropolis.dtx}
%<*package>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{beamerouterthememetropolis}
[2015/06/12 A Modern Beamer Theme]
%</package>
%<driver> \documentclass{ltxdoc}
%<driver> \usepackage{beamerouterthememetropolis}
%<driver> \begin{document}
%<driver> \DocInput{beamerouterthememetropolis.dtx}
%<driver> \end{document}
% \fi
% \CheckSum{0}
% \StopEventually{}
% \iffalse
%<*package>
% ------------------------------------------------------------------------- \fi
2015-06-22 23:43:52 +02:00
%
% \subsection{\textsc{metropolis} outer theme}
2015-06-18 09:22:03 +02:00
%
% A |beamer| outer theme dictates the style of the frame elements traditionally
% set outside the body of each slide: the head, footline, and frame title.
%
2015-06-22 23:43:52 +02:00
% Load required packages.
% \begin{macrocode}
\RequirePackage{etoolbox}
2015-06-22 23:43:52 +02:00
\RequirePackage{calc}
\RequirePackage{pgfopts}
% \end{macrocode}
%
2015-06-18 09:22:03 +02:00
%
%
% \subsubsection{Options}
2015-06-22 07:24:49 +02:00
%
2015-06-22 23:43:52 +02:00
% \begin{macro}{numbering}
% This option controls the page numbering.
2015-06-22 07:24:49 +02:00
% \begin{macrocode}
2015-06-22 23:43:52 +02:00
\pgfkeys{
/metropolis/outer/numbering/.cd,
.is choice,
none/.code=\setbeamertemplate{frame numbering}[none],
counter/.code=\setbeamertemplate{frame numbering}[counter],
fraction/.code=\setbeamertemplate{frame numbering}[fraction],
}
2015-06-22 07:24:49 +02:00
% \end{macrocode}
2015-06-22 23:43:52 +02:00
% \end{macro}
%
% \begin{macro}{progressbar}
% This option controls the progressbar.
% \begin{macrocode}
\pgfkeys{
/metropolis/outer/progressbar/.cd,
.is choice,
none/.code=\setbeamertemplate{progress bar in head/foot}[none],
top/.code=\setbeamertemplate{progress bar in head/foot}[top],
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{frametitleformat}
% Control the case style of the frame title
% \begin{macrocode}
\pgfkeys{
/metropolis/outer/frametitleformat/.cd,
.is choice,
regular/.code=\renewcommand{\@metropolis@frametitleformat}{},
lowercase/.code={%
\renewcommand{\@metropolis@frametitleformat}{\MakeLowercase}
},
uppercase/.code={%
\renewcommand{\@metropolis@frametitleformat}{\MakeUppercase}
},
2015-06-22 23:43:52 +02:00
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{frametitleoffset}
% This option controls the frame title offset.
% \begin{macrocode}
\pgfkeys{
/metropolis/outer/.cd,
frametitleoffset/.code=\setlength{\@metropolis@voffset}{#1},
noframetitleoffset/.code=\setlength{\@metropolis@voffset}{0em},
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@metropolis@outer@setdefaults}
% Set default values for outer theme options.
% \begin{macrocode}
\newcommand{\@metropolis@outer@setdefaults}{
\pgfkeys{/metropolis/outer/.cd,
numbering=counter,
progressbar=none,
frametitleformat=lowercase,
2015-06-22 23:43:52 +02:00
frametitleoffset=2em,
}
}
% \end{macrocode}%
% \end{macro}
%
2015-06-22 07:24:49 +02:00
%
%
% \subsubsection{Head and footline}
2015-06-18 09:22:03 +02:00
%
% All good |beamer| presentations should already remove the navigation symbols,
% but \textsc{metropolis} removes them automatically (just in case).
%
% \begin{macrocode}
\setbeamertemplate{navigation symbols}{}
% \end{macrocode}
%
2015-06-22 23:43:52 +02:00
% Template for the frame number. Can be omitted, shown or displayed as a
% fraction of the total frames.
%
% \begin{macrocode}
\defbeamertemplate{frame numbering}{none}{
% intentionally empty
}
\defbeamertemplate{frame numbering}{counter}{
\insertframenumber
}
\defbeamertemplate{frame numbering}{fraction}{
\insertframenumber/\inserttotalframenumber
}
% \end{macrocode}
%
% Define additional space between frame title and content. By default 2em.
%
% \begin{macrocode}
\newlength{\@metropolis@voffset}
% \end{macrocode}
%
% The only element in the footline by default is the frame number.
2015-06-18 09:22:03 +02:00
%
% \begin{macrocode}
\setbeamertemplate{footline}{%
\begin{beamercolorbox}[%
wd=\textwidth,
ht=3ex,
dp=3ex,
leftskip=0.3cm,
rightskip=0.3cm
]{footline}%
2015-06-22 23:43:52 +02:00
\hfill\usebeamerfont{page number in head/foot}%
\usebeamertemplate*{frame numbering}
2015-06-18 09:22:03 +02:00
\end{beamercolorbox}%
}
% \end{macrocode}
%
%
%
% \subsubsection{Frametitle}
%
% \begin{macro}{\@metropolis@frametitleformat}
% Define a hook to change the case format of the frame title.
% \begin{macrocode}
\def\@metropolis@frametitleformat#1{#1}
% \end{macrocode}
% \end{macro}
%
% To make the |\MakeLowercase| and |\MakeUppercase| macros work in the
% frame title we have to patch |\beamer@@frametitle|. This solution was
% suggested by Enrico Gregorio in an answer to
% \href{http://tex.stackexchange.com/questions/112526/}{this StackExchange
% question}.
%
% \begin{macrocode}
\patchcmd{\beamer@@frametitle}
{\beamer@ifempty{#2}{}{%
\gdef\insertframetitle{{#2\ifnum\beamer@autobreakcount>0\relax{}\space\usebeamertemplate*{frametitle continuation}\fi}}%
\gdef\beamer@frametitle{#2}%
\gdef\beamer@shortframetitle{#1}%
}}
{\beamer@ifempty{#2}{}{%
\gdef\insertframetitle{{\@metropolis@frametitleformat{#2}\ifnum\beamer@autobreakcount>0\relax{}\space\usebeamertemplate*{frametitle continuation}\fi}}%
\gdef\beamer@frametitle{#2}%
\gdef\beamer@shortframetitle{#1}%
}}
{}
{\PackageError{beamerouterthememetropolis}{Patching frame title failed.}}
% \end{macrocode}
%
% \begin{macro}{frametitle}
%
% Template for the frame title, which is optionally underlined with a
% progress bar.
%
% \begin{macrocode}
\setbeamertemplate{frametitle}{%
\nointerlineskip
\begin{beamercolorbox}[%
wd=\paperwidth,
leftskip=0.3cm,
rightskip=0.3cm,
ht=2.5ex,
dp=1.5ex
]{frametitle}
\insertframetitle%
\end{beamercolorbox}%
2015-06-22 23:43:52 +02:00
\usebeamertemplate*{progress bar in head/foot}
\vspace{\@metropolis@voffset}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{progress bar in head/foot}
%
% Template for the progress bar optionally displayed below the frame title
% on each page. Much of this code is duplicated in the inner theme's template
% |progress bar in section page|.
%
% \begin{macrocode}
\newlength{\metropolis@progressinheadfoot}
2015-06-22 23:43:52 +02:00
\defbeamertemplate{progress bar in head/foot}{none}{}
\defbeamertemplate{progress bar in head/foot}{head}{
\nointerlineskip
\setlength{\metropolis@progressinheadfoot}{%
\paperwidth * \ratio{\insertframenumber pt}{\inserttotalframenumber pt}%
}%
2015-06-22 23:43:52 +02:00
\begin{beamercolorbox}[
wd=\paperwidth,
ht=0.4pt,
dp=0pt]{progress bar in head/foot}
\begin{tikzpicture}
\draw[bg, fill=bg] (0,0) rectangle (\paperwidth, 0.4pt);
\draw[fg, fill=fg] (0,0) rectangle (\metropolis@progressinheadfoot, 0.4pt);
\end{tikzpicture}%
\end{beamercolorbox}
}
% \end{macrocode}
% \end{macro}
%
2015-06-22 23:43:52 +02:00
% Process package options
%
2015-06-22 23:43:52 +02:00
% \begin{macrocode}
\@metropolis@outer@setdefaults
\ProcessPgfPackageOptions{/metropolis/outer}
% \end{macrocode}
%
2015-06-18 08:46:34 +02:00
% \iffalse
%</package>
% \fi
% \Finale
\endinput