mirror of https://github.com/matze/mtheme.git
439 lines
14 KiB
TeX
439 lines
14 KiB
TeX
% \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
|
|
%<*package>
|
|
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesPackage{beamerfontthememetropolis}[2016/03/14 Metropolis font theme]
|
|
%</package>
|
|
% \fi
|
|
% \CheckSum{0}
|
|
% \StopEventually{}
|
|
% \iffalse
|
|
%<*package>
|
|
% ------------------------------------------------------------------------- \fi
|
|
%
|
|
% \subsection{\themename font theme}
|
|
%
|
|
% A |beamer| font theme sets the style of the font used in the document.
|
|
%
|
|
%
|
|
%
|
|
% \subsubsection{Package dependencies}
|
|
%
|
|
% \begin{macrocode}
|
|
\RequirePackage{etoolbox}
|
|
\RequirePackage{ifxetex}
|
|
\RequirePackage{ifluatex}
|
|
\RequirePackage{pgfopts}
|
|
% \end{macrocode}
|
|
%
|
|
%
|
|
%
|
|
% \subsubsection{Load Fira fonts}
|
|
%
|
|
% If the presentation is compiled with Xe\LaTeX{} or Lua\LaTeX{}, the fontspec
|
|
% package is loaded and we search for the |Fira| fonts.
|
|
%
|
|
% \begin{macrocode}
|
|
\ifboolexpr{bool {xetex} or bool {luatex}}{
|
|
\@ifpackageloaded{fontspec}{
|
|
\PassOptionsToPackage{no-math}{fontspec}
|
|
}{
|
|
\RequirePackage[no-math]{fontspec}
|
|
}
|
|
% \end{macrocode}
|
|
%
|
|
% \begin{macro}{\checkfont}
|
|
% Checks if a font is installed; if not, |fontsnotfound| is increased.
|
|
% \begin{macrocode}
|
|
\newcounter{fontsnotfound}
|
|
\newcommand{\checkfont}[1]{%
|
|
\suppressfontnotfounderror=1%
|
|
\font\x = "#1" at 10pt
|
|
\selectfont
|
|
\ifx\x\nullfont%
|
|
\stepcounter{fontsnotfound}%
|
|
\fi%
|
|
\suppressfontnotfounderror=0%
|
|
}
|
|
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\iffontsavailable}
|
|
% Resets the |fontsnotfound| counter and calls |\checkfont| for each font in
|
|
% the comma separated list in the first argument.
|
|
% \begin{macrocode}
|
|
\newcommand{\iffontsavailable}[3]{%
|
|
\setcounter{fontsnotfound}{0}%
|
|
\expandafter\forcsvlist\expandafter%
|
|
\checkfont\expandafter{#1}%
|
|
\ifnum\value{fontsnotfound}=0%
|
|
#2%
|
|
\else%
|
|
#3%
|
|
\fi%
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% We search for regular, italic, light, light italic, mono, and mono bold
|
|
% fonts under the default |Fira Sans| and |Fira Mono| names. If this fails,
|
|
% the suffix OT --- used by some Linux distributions --- will be tried. If this
|
|
% also fails, a warning will be displayed and the standard fonts will be used.
|
|
%
|
|
% \begin{macrocode}
|
|
\iffontsavailable{Fira Sans Light,%
|
|
Fira Sans Light Italic,%
|
|
Fira Sans,%
|
|
Fira Sans Italic}%
|
|
{%
|
|
\setsansfont[ItalicFont={Fira Sans Light Italic},%
|
|
BoldFont={Fira Sans},%
|
|
BoldItalicFont={Fira Sans Italic}]%
|
|
{Fira Sans Light}%
|
|
}{%
|
|
\iffontsavailable{Fira Sans Light OT,%
|
|
Fira Sans Light Italic OT,%
|
|
Fira Sans OT,%
|
|
Fira Sans Italic OT}%
|
|
{%
|
|
\setsansfont[ItalicFont={Fira Sans Light Italic OT},%
|
|
BoldFont={Fira Sans OT},%
|
|
BoldItalicFont={Fira Sans Italic OT}]%
|
|
{Fira Sans Light OT}%
|
|
}{%
|
|
\PackageWarning{beamerthememetropolis}{%
|
|
Could not find Fira Sans fonts%
|
|
}
|
|
}
|
|
}
|
|
\iffontsavailable{Fira Mono, Fira Mono Bold}{%
|
|
\setmonofont[BoldFont={Fira Mono Medium}]{Fira Mono}%
|
|
}{%
|
|
\iffontsavailable{Fira Mono OT, Fira Mono Bold OT}{%
|
|
\setmonofont[BoldFont={Fira Mono Medium OT}]{Fira Mono OT}%
|
|
}{%
|
|
\PackageWarning{beamerthememetropolis}{%
|
|
Could not find Fira Mono fonts%
|
|
}
|
|
}
|
|
}
|
|
\AtBeginEnvironment{tabular}{%
|
|
\addfontfeature{Numbers={Monospaced}}%
|
|
}
|
|
}{%
|
|
\PackageWarning{beamerthememetropolis}{%
|
|
You need to compile with XeLaTeX or LuaLaTeX to use the Fira fonts%
|
|
}
|
|
}
|
|
% \end{macrocode}
|
|
%
|
|
% This concludes the portion of the code which is only run when compiled with
|
|
% Xe\LaTeX{} or Lua\LaTeX{}. The remainder of this package applies regardless
|
|
% of the compiling engine.
|
|
%
|
|
%
|
|
%
|
|
% \subsubsection{General font definitions}
|
|
%
|
|
% \begin{macrocode}
|
|
\setbeamerfont{title}{size=\Large,%
|
|
series=\bfseries}
|
|
\setbeamerfont{author}{size=\small}
|
|
\setbeamerfont{date}{size=\small}
|
|
\setbeamerfont{section title}{size=\Large,%
|
|
series=\bfseries}
|
|
\setbeamerfont{block title}{size=\normalsize,%
|
|
series=\bfseries}
|
|
\setbeamerfont{block title alerted}{size=\normalsize,%
|
|
series=\bfseries}
|
|
\setbeamerfont*{subtitle}{size=\large}
|
|
\setbeamerfont{frametitle}{size=\large,%
|
|
series=\bfseries}
|
|
\setbeamerfont{caption}{size=\small}
|
|
\setbeamerfont{caption name}{series=\bfseries}
|
|
\setbeamerfont{description item}{series=\bfseries}
|
|
\setbeamerfont{page number in head/foot}{size=\scriptsize}
|
|
\setbeamerfont{bibliography entry author}{size=\normalsize,%
|
|
series=\normalfont}
|
|
\setbeamerfont{bibliography entry title}{size=\normalsize,%
|
|
series=\bfseries}
|
|
\setbeamerfont{bibliography entry location}{size=\normalsize,%
|
|
series=\normalfont}
|
|
\setbeamerfont{bibliography entry note}{size=\small,%
|
|
series=\normalfont}
|
|
\setbeamerfont{standout}{size=\Large,%
|
|
series=\bfseries}
|
|
% \end{macrocode}
|
|
%
|
|
%
|
|
%
|
|
% \subsubsection{Title format options}
|
|
%
|
|
% \begin{macro}{titleformat title}
|
|
% Controls the format of the title.
|
|
% \begin{macrocode}
|
|
\pgfkeys{
|
|
/metropolis/font/titleformat title/.cd,
|
|
.is choice,
|
|
regular/.code={%
|
|
\let\metropolis@titleformat\@empty%
|
|
\setbeamerfont{title}{shape=\normalfont}%
|
|
},
|
|
smallcaps/.code={%
|
|
\let\metropolis@titleformat\@empty%
|
|
\setbeamerfont{title}{shape=\scshape}%
|
|
},
|
|
allsmallcaps/.code={%
|
|
\let\metropolis@titleformat\lowercase%
|
|
\setbeamerfont{title}{shape=\scshape}%
|
|
\PackageWarning{beamerthememetropolis}{%
|
|
Be aware that titleformat title=allsmallcaps can lead to problems%
|
|
}
|
|
},
|
|
allcaps/.code={%
|
|
\let\metropolis@titleformat\uppercase%
|
|
\setbeamerfont{title}{shape=\normalfont}
|
|
\PackageWarning{beamerthememetropolis}{%
|
|
Be aware that titleformat title=allcaps can lead to problems%
|
|
}
|
|
},
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{titleformat subtitle}
|
|
% Control the format of the subtitle.
|
|
% \begin{macrocode}
|
|
\pgfkeys{
|
|
/metropolis/font/titleformat subtitle/.cd,
|
|
.is choice,
|
|
regular/.code={%
|
|
\let\metropolis@subtitleformat\@empty%
|
|
\setbeamerfont{subtitle}{shape=\normalfont}%
|
|
},
|
|
smallcaps/.code={%
|
|
\let\metropolis@subtitleformat\@empty%
|
|
\setbeamerfont{subtitle}{shape=\scshape}%
|
|
},
|
|
allsmallcaps/.code={%
|
|
\let\metropolis@subtitleformat\lowercase%
|
|
\setbeamerfont{subtitle}{shape=\scshape}%
|
|
\PackageWarning{beamerthememetropolis}{%
|
|
Be aware that titleformat subtitle=allsmallcaps can lead to problems%
|
|
}
|
|
},
|
|
allcaps/.code={%
|
|
\let\metropolis@subtitleformat\uppercase%
|
|
\setbeamerfont{subtitle}{shape=\normalfont}%
|
|
\PackageWarning{beamerthememetropolis}{%
|
|
Be aware that titleformat subtitle=allcaps can lead to problems%
|
|
}
|
|
},
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{titleformat section}
|
|
% Controls the format of the section title.
|
|
% \begin{macrocode}
|
|
\pgfkeys{
|
|
/metropolis/font/titleformat section/.cd,
|
|
.is choice,
|
|
regular/.code={%
|
|
\let\metropolis@sectiontitleformat\@empty%
|
|
\setbeamerfont{section title}{shape=\normalfont}%
|
|
},
|
|
smallcaps/.code={%
|
|
\let\metropolis@sectiontitleformat\@empty%
|
|
\setbeamerfont{section title}{shape=\scshape}%
|
|
},
|
|
allsmallcaps/.code={%
|
|
\let\metropolis@sectiontitleformat\MakeLowercase%
|
|
\setbeamerfont{section title}{shape=\scshape}%
|
|
\PackageWarning{beamerthememetropolis}{%
|
|
Be aware that titleformat section=allsmallcaps can lead to problems%
|
|
}
|
|
},
|
|
allcaps/.code={%
|
|
\let\metropolis@sectiontitleformat\MakeUppercase%
|
|
\setbeamerfont{section title}{shape=\normalfont}%
|
|
\PackageWarning{beamerthememetropolis}{%
|
|
Be aware that titleformat section=allcaps can lead to problems%
|
|
}
|
|
},
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{frametitleformat}
|
|
% Control the format of the frame title.
|
|
% \begin{macrocode}
|
|
\pgfkeys{
|
|
/metropolis/font/titleformat frame/.cd,
|
|
.is choice,
|
|
regular/.code={%
|
|
\let\metropolis@frametitleformat\@empty%
|
|
\setbeamerfont{frametitle}{shape=\normalfont}%
|
|
},
|
|
smallcaps/.code={%
|
|
\let\metropolis@frametitleformat\@empty%
|
|
\setbeamerfont{frametitle}{shape=\scshape}%
|
|
},
|
|
allsmallcaps/.code={%
|
|
\let\metropolis@frametitleformat\MakeLowercase%
|
|
\setbeamerfont{frametitle}{shape=\scshape}%
|
|
\PackageWarning{beamerthememetropolis}{%
|
|
Be aware that titleformat frame=allsmallcaps can lead to problems%
|
|
}
|
|
},
|
|
allcaps/.code={%
|
|
\let\metropolis@frametitleformat\MakeUppercase%
|
|
\setbeamerfont{frametitle}{shape=\normalfont}
|
|
\PackageWarning{beamerthememetropolis}{%
|
|
Be aware that titleformat frame=allcaps can lead to problems%
|
|
}
|
|
},
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{titleformat aliases}
|
|
% Allows |titleformat title| et al. to be used in the |\usetheme|
|
|
% declaration, where \LaTeX{} automatically removes all spaces.
|
|
% \begin{macrocode}
|
|
\pgfkeys{
|
|
/metropolis/font/.cd,
|
|
titleformattitle/.code=\pgfkeysalso{titleformat title=#1},
|
|
titleformatsubtitle/.code=\pgfkeysalso{titleformat subtitle=#1},
|
|
titleformatsection/.code=\pgfkeysalso{titleformat section=#1},
|
|
titleformatframe/.code=\pgfkeysalso{titleformat frame=#1},
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\metropolis@font@setdefaults}
|
|
% Sets default values for font theme options.
|
|
% \begin{macrocode}
|
|
\newcommand{\metropolis@font@setdefaults}{
|
|
\pgfkeys{/metropolis/font/.cd,
|
|
titleformat title=regular,
|
|
titleformat subtitle=regular,
|
|
titleformat section=regular,
|
|
titleformat frame=regular,
|
|
}
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% We first define hooks to change the case format of the titles.
|
|
%
|
|
% \begin{macrocode}
|
|
\def\metropolis@titleformat#1{#1}
|
|
\def\metropolis@subtitleformat#1{#1}
|
|
\def\metropolis@sectiontitleformat#1{#1}
|
|
\def\metropolis@frametitleformat#1{#1}
|
|
% \end{macrocode}
|
|
%
|
|
% To make the uppercase and lowercase macros work in the title, subtitle, etc.,
|
|
% we have to patch the appropriate |beamer| commands that set their values.
|
|
% 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@title}%
|
|
{\def\inserttitle{#2}}%
|
|
{\def\inserttitle{\metropolis@titleformat{#2}}}%
|
|
{}%
|
|
{\PackageError{beamerfontthememetropolis}{Patching title failed}\@ehc}
|
|
\patchcmd{\beamer@subtitle}%
|
|
{\def\insertsubtitle{#2}}%
|
|
{\def\insertsubtitle{\metropolis@subtitleformat{#2}}}%
|
|
{}%
|
|
{\PackageError{beamerfontthememetropolis}{Patching subtitle failed}\@ehc}
|
|
\patchcmd{\sectionentry}
|
|
{\def\insertsectionhead{#2}}
|
|
{\def\insertsectionhead{\metropolis@sectiontitleformat{#2}}}
|
|
{}
|
|
{\PackageError{beamerfontthememetropolis}{Patching section title failed}\@ehc}
|
|
\@tempswafalse
|
|
\patchcmd{\beamer@section}
|
|
{\def\insertsectionhead{\hyperlink{Navigation\the\c@page}{#1}}}
|
|
{\def\insertsectionhead{\hyperlink{Navigation\the\c@page}{%
|
|
\metropolis@sectiontitleformat{#1}}}}
|
|
{\@tempswatrue}
|
|
{}
|
|
\patchcmd{\beamer@section}
|
|
{\protected@edef\insertsectionhead{\noexpand\hyperlink{Navigation\the\c@page}{#1}}}
|
|
{\protected@edef\insertsectionhead{\noexpand\hyperlink{Navigation\the\c@page}{%
|
|
\noexpand\metropolis@sectiontitleformat{#1}}}}
|
|
{\@tempswatrue}
|
|
{}
|
|
\if@tempswa\else
|
|
\PackageError{beamerfontthememetropolis}{Patching section title failed}\@ehc
|
|
\fi
|
|
\@tempswafalse
|
|
\patchcmd{\beamer@subsection}
|
|
{\def\insertsubsectionhead{\hyperlink{Navigation\the\c@page}{#1}}}
|
|
{\def\insertsubsectionhead{\hyperlink{Navigation\the\c@page}{%
|
|
\metropolis@sectiontitleformat{#1}}}}
|
|
{\@tempswatrue}
|
|
{}
|
|
\patchcmd{\beamer@subsection}
|
|
{\protected@edef\insertsubsectionhead{\noexpand\hyperlink{Navigation\the\c@page}{#1}}}
|
|
{\protected@edef\insertsubsectionhead{\noexpand\hyperlink{Navigation\the\c@page}{%
|
|
\noexpand\metropolis@sectiontitleformat{#1}}}}
|
|
{\@tempswatrue}
|
|
{}
|
|
\if@tempswa\else
|
|
\PackageError{beamerfontthememetropolis}{Patching section title failed}\@ehc
|
|
\fi
|
|
% \end{macrocode}
|
|
%
|
|
% Similarly, to make the |\MakeLowercase| and |\MakeUppercase| macros work in
|
|
% the frame title we have to patch |\beamer@@frametitle|.
|
|
%
|
|
% \begin{macrocode}
|
|
\patchcmd{\beamer@@frametitle}
|
|
{{%
|
|
\gdef\insertframetitle{{#2\ifnum\beamer@autobreakcount>0\relax{}\space%
|
|
\usebeamertemplate*{frametitle continuation}\fi}}%
|
|
\gdef\beamer@frametitle{#2}%
|
|
\gdef\beamer@shortframetitle{#1}%
|
|
}}
|
|
{{%
|
|
\gdef\insertframetitle{{\metropolis@frametitleformat{#2}\ifnum%
|
|
\beamer@autobreakcount>0\relax{}\space%
|
|
\usebeamertemplate*{frametitle continuation}\fi}}%
|
|
\gdef\beamer@frametitle{#2}%
|
|
\gdef\beamer@shortframetitle{#1}%
|
|
}}
|
|
{}
|
|
{\PackageError{beamerfontthememetropolis}{Patching frame title failed}\@ehc}
|
|
% \end{macrocode}
|
|
%
|
|
%
|
|
%
|
|
% \subsubsection{Process package options}
|
|
%
|
|
% \begin{macrocode}
|
|
\metropolis@font@setdefaults
|
|
\ProcessPgfPackageOptions{/metropolis/font}
|
|
% \end{macrocode}
|
|
% \iffalse
|
|
%</package>
|
|
% \fi
|
|
% \Finale
|
|
\endinput
|