summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/beamer-contrib/themes/moloch/beamerinnerthememoloch.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/beamer-contrib/themes/moloch/beamerinnerthememoloch.dtx')
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/moloch/beamerinnerthememoloch.dtx513
1 files changed, 513 insertions, 0 deletions
diff --git a/macros/latex/contrib/beamer-contrib/themes/moloch/beamerinnerthememoloch.dtx b/macros/latex/contrib/beamer-contrib/themes/moloch/beamerinnerthememoloch.dtx
new file mode 100644
index 0000000000..8ab2b31185
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/moloch/beamerinnerthememoloch.dtx
@@ -0,0 +1,513 @@
+% \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/).
+%% ---------------------------------------------------------------------------
+%% Copyright 2024 Johan Larsson and contributors
+% ------------------------------------------------------------------------- \fi
+% \iffalse
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{beamerinnerthememoloch}[2024-01-15 v0.1.0 Moloch inner theme] % x-release-please-version
+%</package>
+% \fi
+% \CheckSum{0}
+% \StopEventually{}
+% \iffalse
+%<*package>
+% ------------------------------------------------------------------------- \fi
+%
+% \subsection{\themename inner theme}
+%
+% A |beamer| inner theme dictates the style of the frame elements traditionally
+% set in the ``body'' of each slide. These include:
+%
+% \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.
+% \end{itemize}
+%
+%
+%
+% \subsubsection{Package dependencies}
+%
+% \begin{macrocode}
+\RequirePackage{keyval}
+\RequirePackage{calc}
+\RequirePackage{pgfopts}
+\RequirePackage{tikz}
+% \end{macrocode}
+%
+%
+%
+% \subsubsection{Options}
+%
+% \begin{macro}{sectionpage}
+% Optionally add a slide marking the beginning of each section.
+% \begin{macrocode}
+\pgfkeys{
+ /moloch/inner/sectionpage/.cd,
+ .is choice,
+ none/.code=\moloch@disablesectionpage,
+ simple/.code={%
+ \moloch@enablesectionpage%
+ \setbeamertemplate{section page}[simple]%
+ },
+ progressbar/.code={%
+ \moloch@enablesectionpage%
+ \setbeamertemplate{section page}[progressbar]%
+ },
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{subsectionpage}
+% Optionally add a slide marking the beginning of each subsection.
+% \begin{macrocode}
+\pgfkeys{
+ /moloch/inner/subsectionpage/.cd,
+ .is choice,
+ none/.code=\moloch@disablesubsectionpage,
+ simple/.code={%
+ \moloch@enablesubsectionpage%
+ \setbeamertemplate{section page}[simple]%
+ },
+ progressbar/.code={%
+ \moloch@enablesubsectionpage%
+ \setbeamertemplate{section page}[progressbar]%
+ },
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\moloch@inner@setdefaults}
+% Set default values for inner theme options.
+% \begin{macrocode}
+\newcommand{\moloch@inner@setdefaults}{
+ \pgfkeys{/moloch/inner/.cd,
+ sectionpage=progressbar,
+ subsectionpage=none
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{Title page}
+%
+% \begin{macro}{title page}
+% Template for the title page. Each element is only typset if it is defined
+% by the user. If |\subtitle| is empty, for example, it won't leave a blank
+% space on the title slide.
+% \begin{macrocode}
+\setbeamertemplate{title page}{
+ \begin{minipage}[b][\paperheight]{\textwidth}
+ \ifx\inserttitlegraphic\@empty\else\usebeamertemplate*{title graphic}\fi
+ \vfill%
+ \ifx\inserttitle\@empty\else\usebeamertemplate*{title}\fi
+ \ifx\insertsubtitle\@empty\else\usebeamertemplate*{subtitle}\fi
+ \usebeamertemplate*{title separator}
+ % \end{macrocode}
+ %
+ % 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\usebeamertemplate*{author}\fi
+ \ifx\insertinstitute\@empty\else\usebeamertemplate*{institute}\fi
+ \ifx\insertdate\@empty\else\usebeamertemplate*{date}\fi
+ \vfill
+ \null
+ \end{minipage}
+}
+% \end{macrocode}
+% \end{macro}%
+%
+% 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}
+%
+% Inserts the title frame, or causes the current frame to use the
+% |title page| template.
+%
+% \begin{macrocode}
+\def\maketitle{%
+ \ifbeamer@inframe
+ \titlepage
+ \else
+ \frame[plain,noframenumbering]{\titlepage}
+ \fi
+}
+\def\titlepage{%
+ \usebeamertemplate{title page}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{title graphic}
+% Set the title graphic in a zero-height box, so it doesn't change the
+% position of other elements.
+% \begin{macrocode}
+\setbeamertemplate{title graphic}{
+ \vbox to 0pt {
+ \vspace*{2em}
+ \inserttitlegraphic%
+ }%
+ \nointerlineskip%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{title}
+% Set the title on the title page.
+% \begin{macrocode}
+\setbeamertemplate{title}{
+ \raggedright%
+ \linespread{1.0}%
+ \inserttitle%
+ \par%
+ \vspace*{0.5em}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{subtitle}
+% Set the subtitle on the title page.
+% \begin{macrocode}
+\setbeamertemplate{subtitle}{
+ \raggedright%
+ \insertsubtitle%
+ \par%
+ \vspace*{0.5em}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{title separator}
+% Template to set the title graphic in a zero-height box. (It won't
+% change the position of other elements.)
+% \begin{macrocode}
+\newlength{\moloch@titleseparator@linewidth}
+\setlength{\moloch@titleseparator@linewidth}{0.4pt}
+\setbeamertemplate{title separator}{
+ \tikzexternaldisable%
+ \begin{tikzpicture}
+ \fill[fg] (0,0) rectangle (\textwidth, \moloch@titleseparator@linewidth);
+ \end{tikzpicture}%
+ \tikzexternalenable%
+ \par%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{author}
+% Set the author on the title page.
+% \begin{macrocode}
+\setbeamertemplate{author}{
+ \vspace*{2em}
+ \insertauthor%
+ \par%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{institute}
+% Set the institute on the title page.
+% \begin{macrocode}
+\setbeamertemplate{institute}{
+ \vspace*{0.5em}
+ \insertinstitute%
+ \par%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{date}
+% Set the date on the title page.
+% \begin{macrocode}
+\setbeamertemplate{date}{
+ \vspace*{1.5em}
+ \insertdate%
+ \par%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Section page}
+%
+% \begin{macro}{section page}
+%
+% Template for the section title slide at the beginning of each section.
+%
+% \begin{macrocode}
+\defbeamertemplate{section page}{simple}{
+ \begin{center}
+ \usebeamercolor[fg]{section title}
+ \usebeamerfont{section title}
+ \insertsectionhead\par
+ \ifx\insertsubsectionhead\@empty\else
+ \usebeamercolor[fg]{subsection title}
+ \usebeamerfont{subsection title}
+ \insertsubsectionhead
+ \fi
+ \end{center}
+}
+\defbeamertemplate{section page}{progressbar}{
+ \centering
+ \begin{minipage}{0.7875\linewidth}
+ \raggedright
+ \usebeamercolor[fg]{section title}
+ \usebeamerfont{section title}
+ \insertsectionhead\\[-1ex]
+ \usebeamertemplate*{progress bar in section page}
+ \par
+ \ifx\insertsubsectionhead\@empty\else%
+ \usebeamercolor[fg]{subsection title}%
+ \usebeamerfont{subsection title}%
+ \insertsubsectionhead
+ \fi
+ \end{minipage}
+ \par
+ \vspace{\baselineskip}
+}
+\newcommand{\moloch@disablesectionpage}{
+ \AtBeginSection{
+ % intentionally empty
+ }
+}
+\newcommand{\moloch@enablesectionpage}{
+ \AtBeginSection{
+ \ifbeamer@inframe
+ \sectionpage
+ \else
+ \frame[plain,c,noframenumbering]{\sectionpage}
+ \fi
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{subsection page}
+%
+% Template for the subsection title slide that can optionally be added to
+% at the beginning of each subsection.
+%
+% \begin{macrocode}
+\setbeamertemplate{subsection page}{%
+ \usebeamertemplate*{section page}
+}
+\newcommand{\moloch@disablesubsectionpage}{
+ \AtBeginSubsection{
+ % intentionally empty
+ }
+}
+\newcommand{\moloch@enablesubsectionpage}{
+ \AtBeginSubsection{
+ \ifbeamer@inframe
+ \subsectionpage
+ \else
+ \frame[plain,c,noframenumbering]{\subsectionpage}
+ \fi
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{progress bar in section page}
+%
+% Template for the progress bar displayed by default on the section page.
+% This code is duplicated in large part in the outer theme's template
+% |progress bar in head/foot|.
+%
+% \begin{macrocode}
+\newlength{\moloch@progressonsectionpage}
+\newlength{\moloch@progressonsectionpage@linewidth}
+\setlength{\moloch@progressonsectionpage@linewidth}{0.4pt}
+\setbeamertemplate{progress bar in section page}{
+ \pgfmathsetlength{\moloch@progressonsectionpage}{
+ \textwidth * min(1,\insertframenumber/\inserttotalframenumber)
+ }
+ \tikzexternaldisable
+ \begin{tikzpicture}
+ \fill[bg]
+ (0,0)
+ rectangle
+ (\textwidth, \moloch@progressonsectionpage@linewidth);
+ \fill[fg]
+ (0,0)
+ rectangle
+ (\moloch@progressonsectionpage, \moloch@progressonsectionpage@linewidth);
+ \end{tikzpicture}
+ \tikzexternalenable
+}
+% \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
+% |\moloch@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}
+%
+% \subsubsection{Lists and floats}
+%
+% \begin{macrocode}
+\setbeamertemplate{itemize item}{\(\bullet\)}
+\setbeamertemplate{itemize subitem}{\(\circ\)}
+\setbeamertemplate{itemize subsubitem}{\textbullet}
+\setbeamertemplate{caption label separator}{: }
+\setbeamertemplate{caption}[numbered]
+% \end{macrocode}
+%
+%
+%
+% \subsubsection{Footnotes}
+% \begin{macrocode}
+\setbeamertemplate{footnote}{%
+ \parindent 0em\noindent%
+ \raggedright
+ \usebeamercolor{footnote}%
+ \hbox to 0.8em{\hfil\insertfootnotemark}%
+ \insertfootnotetext\par%
+}
+% \end{macrocode}
+%
+%
+%
+% \subsubsection{Text and spacing settings}
+%
+% \begin{macrocode}
+\newlength{\moloch@parskip}
+\setlength{\moloch@parskip}{0.5em}
+\setlength{\parskip}{\moloch@parskip}
+\linespread{1.15}
+% \end{macrocode}
+%
+% By default, Beamer frames offer the |c| option to \textit{almost} vertically
+% center the text, but the placement is a little too high. To fix this, we
+% redefine the |c| option to equalize |\beamer@frametopskip| and
+% |\beamer@framebottomskip|. This solution was suggested by Enrico Gregorio in
+% an answer to \href{http://tex.stackexchange.com/questions/247826/}{this
+% Stack Exchange question}.
+%
+% \begin{macrocode}
+\define@key{beamerframe}{c}[true]{% centered
+ \beamer@frametopskip=0pt plus 1fill\relax%
+ \beamer@framebottomskip=0pt plus 1fill\relax%
+ \beamer@frametopskipautobreak=0pt plus .4\paperheight\relax%
+ \beamer@framebottomskipautobreak=0pt plus .6\paperheight\relax%
+ \def\beamer@initfirstlineunskip{}%
+}
+% \end{macrocode}
+%
+%
+%
+% \subsubsection{Standout frames}
+%
+% \themename offers a custom frame format with large, centered text and an
+% inverted background. To use it, add the key |standout| to the frame:
+%
+% |\begin{frame}[standout] ... \end{frame}|.
+%
+% \begin{macro}{standout}
+%
+% Optional arguments to Beamer's frames are implemented using
+% |\define@key| from the |keyval| package, which will execute code when the
+% defined option is called. For the |standout| option, we begin a group,
+% change the colors and set frame options.
+%
+% \begin{macrocode}
+\providebool{moloch@standout}
+\define@key{beamerframe}{standout}[true]{%
+ \booltrue{moloch@standout}
+ \begingroup
+ \setkeys{beamerframe}{c}
+ \setkeys{beamerframe}{noframenumbering}
+ \ifbeamercolorempty[bg]{palette primary}{
+ \setbeamercolor{background canvas}{
+ use=palette primary,
+ bg=-palette primary.fg
+ }
+ }{
+ \setbeamercolor{background canvas}{
+ use=palette primary,
+ bg=palette primary.bg
+ }
+ }
+ \setbeamercolor{local structure}{
+ fg=palette primary.fg
+ }
+ \usebeamercolor[fg]{palette primary}
+}
+% \end{macrocode}
+%
+% Then we just have to close the group after the standout slide is finished
+% in order to restore the colours and fonts for the rest of the
+% presentation. Unfortunately, we cannot use \AfterEndEnvironment{frame} for
+% this (see \url{http://tex.stackexchange.com/questions/226319/}).
+% Instead, we prepend the |\endgroup| to |\beamer@reseteecodes|, which is run
+% exactly once at the end of each slide.
+%
+% \begin{macrocode}
+\pretocmd{\beamer@reseteecodes}{%
+ \ifbool{moloch@standout}{
+ \endgroup
+ \boolfalse{moloch@standout}
+ }{}
+}{}{}
+% \end{macrocode}
+%
+% We set the fonts and the \centering alignment on the inner content,
+% in such a way that the speaker's note layout isn't affected by the custom
+% formatting.
+%
+% \begin{macrocode}
+\AtBeginEnvironment{beamer@frameslide}{
+ \ifbool{moloch@standout}{
+ \centering
+ \usebeamerfont{standout}
+ }{}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Process package options}
+%
+% \begin{macrocode}
+\moloch@inner@setdefaults
+\ProcessPgfPackageOptions{/moloch/inner}
+% \end{macrocode}
+%
+% \iffalse
+%</package>
+% \fi
+% \Finale
+\endinput