2015-06-18 03:55:51 +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{beamerinnerthememetropolis.dtx}
|
|
|
|
%<*package>
|
|
|
|
\NeedsTeXFormat{LaTeX2e}
|
|
|
|
\ProvidesPackage{beamerinnerthememetropolis}
|
|
|
|
[2015/06/12 A Modern Beamer Theme]
|
|
|
|
%</package>
|
|
|
|
%<driver> \documentclass{ltxdoc}
|
|
|
|
%<driver> \usepackage{beamerinnerthememetropolis}
|
|
|
|
%<driver> \begin{document}
|
|
|
|
%<driver> \DocInput{beamerinnerthememetropolis.dtx}
|
|
|
|
%<driver> \end{document}
|
|
|
|
% \fi
|
|
|
|
% \CheckSum{0}
|
|
|
|
% \StopEventually{}
|
|
|
|
% \iffalse
|
|
|
|
%<*package>
|
|
|
|
% ------------------------------------------------------------------------- \fi
|
2015-06-22 23:43:52 +02:00
|
|
|
%
|
2015-06-18 03:56:13 +02:00
|
|
|
% \section{Implementation: \textsc{metropolis} inner theme}
|
2015-06-18 03:55:51 +02:00
|
|
|
%
|
|
|
|
% A |beamer| inner theme dictates the style of the frame elements traditionally
|
|
|
|
% set in the ``body'' of each slide. These include:
|
2015-06-18 09:23:33 +02:00
|
|
|
%
|
2015-06-18 03:55:51 +02:00
|
|
|
% \begin{itemize}
|
|
|
|
% \item title, part, and section pages;
|
|
|
|
% \item itemize, enumerate, and description environments;
|
|
|
|
% \item block environments including theorems and proofs;
|
|
|
|
% \item figures and tables; and
|
|
|
|
% \item footnotes and plain text.
|
2015-06-18 03:56:13 +02:00
|
|
|
% \end{itemize}
|
|
|
|
%
|
2015-06-22 23:43:52 +02:00
|
|
|
% Load required packages.
|
|
|
|
% \begin{macrocode}
|
|
|
|
\RequirePackage{calc}
|
|
|
|
\RequirePackage{pgfopts}
|
|
|
|
\RequirePackage{tikz}
|
|
|
|
% \end{macrocode}
|
|
|
|
%
|
|
|
|
%
|
|
|
|
%
|
|
|
|
% \subsection{Options}
|
|
|
|
%
|
|
|
|
% \begin{macro}{block}
|
|
|
|
% This option controls the block style.
|
|
|
|
% \begin{macrocode}
|
|
|
|
\pgfkeys{
|
|
|
|
/metropolis/inner/block/.cd,
|
|
|
|
.is choice,
|
|
|
|
transparent/.code=\setlength{\@metropolis@blockskip}{0ex},
|
|
|
|
fill/.code=\setlength{\@metropolis@blockskip}{1ex},
|
|
|
|
}
|
|
|
|
% \end{macrocode}
|
|
|
|
% \end{macro}
|
|
|
|
%
|
|
|
|
% \begin{macro}{sectionpage}
|
|
|
|
% The |sectionpage| option defines the behaviour of the sectionpage.
|
|
|
|
% \begin{macrocode}
|
|
|
|
\pgfkeys{
|
|
|
|
/metropolis/inner/sectionpage/.cd,
|
|
|
|
.is choice,
|
|
|
|
none/.code=\@metropolis@sectionpage@none,
|
|
|
|
progressbar/.code=\@metropolis@sectionpage@progressbar,
|
|
|
|
}
|
|
|
|
% \end{macrocode}
|
|
|
|
% \end{macro}
|
|
|
|
%
|
|
|
|
% \begin{macro}{\@metropolis@inner@setdefaults}
|
|
|
|
% Set default values for inner theme options.
|
|
|
|
% \begin{macrocode}
|
|
|
|
\newcommand{\@metropolis@inner@setdefaults}{
|
|
|
|
\pgfkeys{/metropolis/inner/.cd,
|
|
|
|
sectionpage=progressbar,
|
|
|
|
block=transparent,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
% \end{macrocode}
|
|
|
|
% \end{macro}
|
|
|
|
%
|
|
|
|
%
|
|
|
|
%
|
2015-06-18 03:56:13 +02:00
|
|
|
% \subsection{Title page}
|
|
|
|
%
|
|
|
|
% \begin{macro}{title page}
|
|
|
|
% Template for the title page.
|
|
|
|
% \begin{macrocode}
|
|
|
|
\setbeamertemplate{title page}{
|
|
|
|
\begin{minipage}[b][\paperheight]{\textwidth}
|
|
|
|
% \end{macrocode}
|
|
|
|
%
|
|
|
|
% If the user has set a |titlegraphic|, we set it in a zero-height box so
|
|
|
|
% it doesn't change the position of other elements.
|
|
|
|
%
|
|
|
|
% \begin{macrocode}
|
|
|
|
\ifx\inserttitlegraphic\@empty\else{%
|
|
|
|
\vbox to 0pt {
|
|
|
|
\vspace*{2em}
|
|
|
|
\usebeamercolor[fg]{titlegraphic}%
|
|
|
|
\inserttitlegraphic%
|
|
|
|
}%
|
|
|
|
\nointerlineskip%
|
|
|
|
}
|
|
|
|
\fi
|
|
|
|
\vfill%
|
|
|
|
% \end{macrocode}
|
|
|
|
%
|
|
|
|
% We set the title and subtitle, but only if they are defined by the user.
|
|
|
|
% If |\subtitle| is empty, for example, it won't leave a blank space on the
|
|
|
|
% title slide.
|
|
|
|
%
|
|
|
|
% \begin{macrocode}
|
|
|
|
\ifx\inserttitle\@empty\else{{%
|
|
|
|
\raggedright%
|
|
|
|
\linespread{1.0}%
|
|
|
|
\usebeamerfont{title}%
|
|
|
|
\usebeamercolor[fg]{title}%
|
2015-06-22 23:43:52 +02:00
|
|
|
\@metropolis@titleformat{\inserttitle}%
|
2015-06-18 07:19:47 +02:00
|
|
|
\par%
|
2015-06-18 03:56:13 +02:00
|
|
|
\vspace*{0.5em}
|
|
|
|
}}
|
|
|
|
\fi
|
|
|
|
\ifx\insertsubtitle\@empty\else{{%
|
|
|
|
\usebeamerfont{subtitle}%
|
|
|
|
\usebeamercolor[fg]{subtitle}%
|
|
|
|
\insertsubtitle%
|
2015-06-18 07:19:47 +02:00
|
|
|
\par%
|
|
|
|
\vspace*{0.5em}
|
2015-06-18 03:56:13 +02:00
|
|
|
}}
|
|
|
|
\fi
|
|
|
|
% \end{macrocode}
|
|
|
|
%
|
|
|
|
% A horizontal rule (drawn in TikZ) separates the title and subtitle from
|
|
|
|
% the author, date, and institution.
|
|
|
|
%
|
|
|
|
% \begin{macrocode}
|
|
|
|
\begin{tikzpicture}
|
|
|
|
\usebeamercolor{title separator}
|
|
|
|
\draw[fg] (0, 0) -- (\textwidth, 0);
|
|
|
|
\end{tikzpicture}%
|
2015-06-18 07:19:47 +02:00
|
|
|
\par%
|
2015-06-18 03:56:13 +02:00
|
|
|
\vspace*{1em}%
|
|
|
|
% \end{macrocode}
|
|
|
|
%
|
|
|
|
% Like the title and subtitle, we display the author only when it is defined.
|
|
|
|
% But beamer's definition of |\insertauthor| is always nonempty, so we have
|
|
|
|
% to test another macro initialized by |\author{...}| to see if the user has
|
|
|
|
% defined an author. This solution was suggested by Enrico Gregorio in an
|
|
|
|
% answer to \href{https://tex.stackexchange.com/questions/241306/}{this
|
|
|
|
% Stack Exchange question}.
|
|
|
|
%
|
|
|
|
% \begin{macrocode}
|
|
|
|
\ifx\beamer@shortauthor\@empty\else{{%
|
|
|
|
\usebeamerfont{author}%
|
|
|
|
\usebeamercolor[fg]{author}%
|
|
|
|
\insertauthor%
|
|
|
|
\par%
|
|
|
|
\vspace*{0.25em}
|
|
|
|
}}
|
|
|
|
\fi
|
|
|
|
% \end{macrocode}
|
|
|
|
%
|
|
|
|
% The date and institute are set after the author, again provided they are
|
|
|
|
% nonempty. Note that the default date in \LaTeX{} is |\today|, not |\empty|.
|
|
|
|
%
|
|
|
|
% \begin{macrocode}
|
|
|
|
\ifx\insertdate\@empty\else{{%
|
|
|
|
\usebeamerfont{date}%
|
|
|
|
\usebeamercolor[fg]{date}%
|
|
|
|
\insertdate%
|
|
|
|
\par%
|
|
|
|
}}
|
|
|
|
\fi
|
|
|
|
\ifx\insertinstitute\@empty\else{{%
|
|
|
|
\vspace*{3mm}
|
|
|
|
\usebeamerfont{institute}%
|
|
|
|
\usebeamercolor[fg]{institute}%
|
|
|
|
\insertinstitute%
|
|
|
|
\par%
|
|
|
|
}}
|
|
|
|
\fi
|
|
|
|
\vfill
|
2015-06-22 07:24:49 +02:00
|
|
|
\vspace*{1mm}
|
2015-06-18 03:56:13 +02:00
|
|
|
\end{minipage}
|
|
|
|
}
|
|
|
|
% \end{macrocode}
|
2015-06-22 07:24:49 +02:00
|
|
|
% \end{macro}%
|
2015-06-18 03:56:13 +02:00
|
|
|
%
|
|
|
|
% Normal people should use |\maketitle| or |\titlepage| instead of using the
|
|
|
|
% |title page| beamer template directly. Beamer already defines these macros,
|
|
|
|
% but we patch them here to make the title page |[plain]| by default, remove
|
|
|
|
% |\@thanks|, and ensure the title frame number doesn't count.
|
|
|
|
%
|
|
|
|
% \begin{macro}{\maketitle}
|
|
|
|
% \begin{macro}{\titlepage}
|
2015-06-18 09:23:33 +02:00
|
|
|
%
|
2015-06-18 03:56:13 +02:00
|
|
|
% Inserts the title frame, or causes the current frame to use the
|
|
|
|
% |title page| template.
|
2015-06-18 09:23:33 +02:00
|
|
|
%
|
2015-06-18 03:56:13 +02:00
|
|
|
% \begin{macrocode}
|
|
|
|
\def\maketitle{%
|
|
|
|
\ifbeamer@inframe
|
|
|
|
\titlepage
|
|
|
|
\else
|
|
|
|
\frame[plain]{\titlepage}
|
|
|
|
\fi
|
|
|
|
}
|
|
|
|
\def\titlepage{%
|
|
|
|
\usebeamertemplate{title page}
|
|
|
|
}
|
|
|
|
% \end{macrocode}
|
|
|
|
% \end{macro}
|
|
|
|
% \end{macro}
|
|
|
|
%
|
|
|
|
%
|
2015-06-18 07:15:04 +02:00
|
|
|
%
|
|
|
|
% \subsection{Section page}
|
|
|
|
%
|
|
|
|
% \begin{macro}{section page}
|
2015-06-18 09:23:33 +02:00
|
|
|
%
|
2015-06-18 07:15:04 +02:00
|
|
|
% Template for the section title slide at the beginning of each section.
|
2015-06-18 09:23:33 +02:00
|
|
|
%
|
2015-06-18 07:15:04 +02:00
|
|
|
% \begin{macrocode}
|
2015-06-22 23:43:52 +02:00
|
|
|
\newcommand{\@metropolis@sectionpage@none}{
|
|
|
|
\AtBeginSection{
|
|
|
|
% intenionally empty
|
|
|
|
}
|
|
|
|
}
|
|
|
|
\defbeamertemplate{section page}{progressbar}{
|
2015-06-18 07:15:04 +02:00
|
|
|
\vspace{2em}
|
|
|
|
\centering
|
|
|
|
\begin{minipage}{22em}
|
|
|
|
\usebeamercolor[fg]{section title}
|
|
|
|
\usebeamerfont{section title}
|
2015-06-22 16:38:26 +02:00
|
|
|
\insertsectionhead\\[-1ex]
|
2015-06-18 07:15:04 +02:00
|
|
|
\usebeamertemplate*{progress bar in section page}
|
|
|
|
\end{minipage}
|
|
|
|
\par
|
|
|
|
}
|
2015-06-22 23:43:52 +02:00
|
|
|
\newcommand{\@metropolis@sectionpage@progressbar}{
|
|
|
|
\setbeamertemplate{section page}[progressbar]
|
2015-06-18 07:15:04 +02:00
|
|
|
\AtBeginSection{
|
|
|
|
\ifbeamer@inframe
|
|
|
|
\sectionpage
|
|
|
|
\else
|
|
|
|
\frame[plain,c]{\sectionpage}
|
|
|
|
\fi
|
|
|
|
}
|
2015-06-22 23:43:52 +02:00
|
|
|
}
|
2015-06-18 07:15:04 +02:00
|
|
|
% \end{macrocode}
|
|
|
|
% \end{macro}
|
|
|
|
%
|
|
|
|
% \begin{macro}{progress bar in section page}
|
2015-06-18 09:23:33 +02:00
|
|
|
%
|
2015-06-18 07:15:04 +02:00
|
|
|
% Template for the progress bar displayed by default on the section page.
|
2015-06-18 09:23:33 +02:00
|
|
|
% This code is duplicated in large part in the outer theme's template
|
|
|
|
% |progress bar in head/foot|.
|
|
|
|
%
|
2015-06-18 07:15:04 +02:00
|
|
|
% \begin{macrocode}
|
|
|
|
\newlength{\metropolis@progressonsectionpage}
|
|
|
|
\setbeamertemplate{progress bar in section page}{
|
|
|
|
\setlength{\metropolis@progressonsectionpage}{%
|
|
|
|
\textwidth * \ratio{\insertframenumber pt}{\inserttotalframenumber pt}%
|
|
|
|
}%
|
2015-06-18 09:23:33 +02:00
|
|
|
\begin{tikzpicture}
|
2015-06-18 07:15:04 +02:00
|
|
|
\draw[bg, fill=bg] (0,0) rectangle (\textwidth, 0.4pt);
|
|
|
|
\draw[fg, fill=fg] (0,0) rectangle (\metropolis@progressonsectionpage, 0.4pt);
|
|
|
|
\end{tikzpicture}%
|
|
|
|
}
|
|
|
|
% \end{macrocode}
|
|
|
|
%
|
|
|
|
% The above code assumes that |\insertframenumber| is less than or equal to
|
|
|
|
% |\inserttotalframenumber|. However, this is not true on the first compile;
|
|
|
|
% in the absence of an |.aux| file, |\inserttotalframenumber| defaults to 1.
|
|
|
|
% This behaviour could cause fatal errors for long presentations, as
|
|
|
|
% |\metropolis@progressonsectionpage| would exceed \TeX's maximum length
|
|
|
|
% (16383.99999pt, roughly 5.75 metres or 18.9 feet).
|
|
|
|
% To avoid this, we increase the default value for |\inserttotalframenumber|;
|
|
|
|
% presentations with over 4000 slides will still break on first compile, but
|
|
|
|
% users in that situation likely have deeper problems to solve.
|
|
|
|
%
|
|
|
|
% \begin{macrocode}
|
|
|
|
\def\inserttotalframenumber{100}
|
|
|
|
% \end{macrocode}
|
|
|
|
% \end{macro}
|
|
|
|
%
|
|
|
|
%
|
|
|
|
%
|
2015-06-18 07:16:40 +02:00
|
|
|
% \subsection{Block environments}
|
|
|
|
%
|
|
|
|
% \begin{macrocode}
|
2015-06-22 23:43:52 +02:00
|
|
|
\newlength{\@metropolis@blockskip}
|
2015-06-18 07:16:40 +02:00
|
|
|
\setbeamertemplate{block begin}{%
|
|
|
|
\vspace*{1ex}
|
|
|
|
\begin{beamercolorbox}[%
|
|
|
|
ht=2.4ex,
|
|
|
|
dp=1ex,
|
2015-06-22 23:43:52 +02:00
|
|
|
leftskip=\@metropolis@blockskip,
|
|
|
|
rightskip=\@metropolis@blockskip]{block title}
|
2015-06-18 07:16:40 +02:00
|
|
|
\usebeamerfont*{block title}\insertblocktitle%
|
|
|
|
\end{beamercolorbox}%
|
|
|
|
\vspace*{-1pt}
|
|
|
|
\usebeamerfont{block body}%
|
|
|
|
\begin{beamercolorbox}[%
|
|
|
|
dp=1ex,
|
2015-06-22 23:43:52 +02:00
|
|
|
leftskip=\@metropolis@blockskip,
|
|
|
|
rightskip=\@metropolis@blockskip,
|
2015-06-18 07:16:40 +02:00
|
|
|
vmode]{block body}%
|
|
|
|
}
|
|
|
|
\setbeamertemplate{block end}{%
|
|
|
|
\end{beamercolorbox}
|
|
|
|
\vspace*{0.2ex}
|
|
|
|
}
|
|
|
|
% \end{macrocode}
|
|
|
|
%
|
|
|
|
% Alerted block environment
|
|
|
|
%
|
|
|
|
% \begin{macrocode}
|
|
|
|
\setbeamertemplate{block alerted begin}{%
|
|
|
|
\vspace*{1ex}
|
|
|
|
\begin{beamercolorbox}[%
|
|
|
|
ht=2.4ex,
|
|
|
|
dp=1ex,
|
2015-06-22 23:43:52 +02:00
|
|
|
leftskip=\@metropolis@blockskip,
|
|
|
|
rightskip=\@metropolis@blockskip]{block title alerted}
|
2015-06-18 07:16:40 +02:00
|
|
|
\usebeamerfont*{block title alerted}\insertblocktitle%
|
|
|
|
\end{beamercolorbox}%
|
|
|
|
\vspace*{-1pt}
|
|
|
|
\usebeamerfont{block body alerted}%
|
|
|
|
\begin{beamercolorbox}[%
|
|
|
|
dp=1ex,
|
2015-06-22 23:43:52 +02:00
|
|
|
leftskip=\@metropolis@blockskip,
|
|
|
|
rightskip=\@metropolis@blockskip,
|
2015-06-18 07:16:40 +02:00
|
|
|
vmode]{block body}%
|
|
|
|
}
|
|
|
|
\setbeamertemplate{block alerted end}{%
|
|
|
|
\end{beamercolorbox}
|
|
|
|
\vspace*{0.2ex}
|
|
|
|
}
|
|
|
|
% \end{macrocode}
|
|
|
|
%
|
|
|
|
% Example block environment
|
|
|
|
%
|
|
|
|
% \begin{macrocode}
|
|
|
|
\setbeamertemplate{block example begin}{%
|
|
|
|
\vspace*{1ex}
|
|
|
|
\begin{beamercolorbox}[%
|
|
|
|
ht=2.4ex,
|
|
|
|
dp=1ex,
|
2015-06-22 23:43:52 +02:00
|
|
|
leftskip=\@metropolis@blockskip,
|
|
|
|
rightskip=\@metropolis@blockskip]{block title example}
|
2015-06-18 07:16:40 +02:00
|
|
|
\usebeamerfont*{block title example}\insertblocktitle%
|
|
|
|
\end{beamercolorbox}%
|
|
|
|
\vspace*{-1pt}
|
|
|
|
\usebeamerfont{block body example}%
|
|
|
|
\begin{beamercolorbox}[%
|
|
|
|
dp=1ex,
|
2015-06-22 23:43:52 +02:00
|
|
|
leftskip=\@metropolis@blockskip,
|
|
|
|
rightskip=\@metropolis@blockskip,
|
2015-06-18 07:16:40 +02:00
|
|
|
vmode]{block body}%
|
|
|
|
}
|
|
|
|
\setbeamertemplate{block example end}{%
|
|
|
|
\end{beamercolorbox}
|
|
|
|
\vspace*{0.2ex}
|
|
|
|
}
|
|
|
|
% \end{macrocode}
|
2015-06-18 07:17:21 +02:00
|
|
|
%
|
|
|
|
%
|
|
|
|
%
|
|
|
|
% \subsection{Itemize/enumerate environments}
|
|
|
|
% \begin{macrocode}
|
|
|
|
\setlength{\leftmargini}{1em}
|
|
|
|
\setlength{\leftmarginii}{1em}
|
|
|
|
\setlength{\leftmarginiii}{1em}
|
|
|
|
\setbeamertemplate{itemize item}{\textbullet}
|
|
|
|
\setbeamertemplate{itemize subitem}{\textbullet}
|
|
|
|
\setbeamertemplate{itemize subsubitem}{\textbullet}
|
|
|
|
% \end{macrocode}
|
|
|
|
%
|
2015-06-22 23:43:52 +02:00
|
|
|
%
|
|
|
|
%
|
2015-06-18 07:17:21 +02:00
|
|
|
% \subsection{Figures and tables}
|
|
|
|
% \begin{macrocode}
|
|
|
|
\setbeamertemplate{caption label separator}{: }
|
|
|
|
\setbeamertemplate{caption}[numbered]
|
|
|
|
% \end{macrocode}
|
|
|
|
%
|
2015-06-22 23:43:52 +02:00
|
|
|
%
|
|
|
|
%
|
2015-06-18 07:17:21 +02:00
|
|
|
% \subsection{Footnotes}
|
|
|
|
% \begin{macrocode}
|
|
|
|
\setbeamertemplate{footnote}{%
|
|
|
|
\parindent 0em\noindent%
|
|
|
|
\raggedright
|
|
|
|
\usebeamercolor{footnote}\hbox to 0.8em{\hfil\insertfootnotemark}\insertfootnotetext\par%
|
|
|
|
}
|
|
|
|
% \end{macrocode}
|
|
|
|
%
|
2015-06-22 23:43:52 +02:00
|
|
|
%
|
|
|
|
%
|
|
|
|
% \subsection{General text settings}
|
2015-06-18 07:17:21 +02:00
|
|
|
% \begin{macrocode}
|
|
|
|
\mode<all>
|
|
|
|
\setlength{\parskip}{0.5em}
|
|
|
|
\linespread{1.15}
|
|
|
|
% \end{macrocode}
|
2015-06-18 09:23:33 +02:00
|
|
|
%
|
2015-06-22 23:43:52 +02:00
|
|
|
% Process package options
|
2015-06-18 09:23:33 +02:00
|
|
|
%
|
2015-06-22 23:43:52 +02:00
|
|
|
% \begin{macrocode}
|
|
|
|
\@metropolis@inner@setdefaults
|
|
|
|
\ProcessPgfPackageOptions{/metropolis/inner}
|
|
|
|
% \end{macrocode}
|
2015-06-18 09:23:33 +02:00
|
|
|
%
|
2015-06-18 03:55:51 +02:00
|
|
|
% \iffalse
|
|
|
|
%</package>
|
|
|
|
% \fi
|
|
|
|
% \Finale
|
|
|
|
\endinput
|