% \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}[2017/01/23 Metropolis font theme] % % \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 % % \fi % \Finale \endinput