Files
PSIpresentation/psipresentation.cls

308 lines
8.0 KiB
TeX

%% psipresentation.cls
\ProvidesClass{psipresentation}[2024/05/28 Unofficial PSI Presentation Class by Sven Augustin]
\NeedsTeXFormat{LaTeX2e}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{beamer}}
\ProcessOptions\relax
\LoadClass[final, 10pt, aspectratio=169, xcolor=table]{beamer} % t: align columns to top
\beamertemplatenavigationsymbolsempty
\institute{Paul Scherrer Institut PSI}
\newcommand\centerfor[1]{\def\insertcenterfor{#1}}
\let\insertcenterfor\empty
\newcommand\location[1]{\def\insertlocation{#1}}
\location{}
\newcommand\titleimage[1]{\def\inserttitleimage{#1}}
\let\inserttitleimage\empty
\newcommand\titlecolor[1]{\def\inserttitlecolor{#1}}
\titlecolor{blue}
\RequirePackage{polyglossia}
\RequirePackage{microtype}
\RequirePackage{fontspec}
\RequirePackage{csquotes}
\RequirePackage{tikz}
\setmainlanguage{english}
\setbeamersize{
text margin left=0.055\paperwidth,
text margin right=0.055\paperwidth
}
\setmainfont{Aptos}[
Path = psipresentation/fonts/Aptos/,
Extension = .ttf,
UprightFont = *-Regular,
BoldFont = *-Bold,
ItalicFont = *-Italic,
BoldItalicFont = *-Bold-Italic
]
\setsansfont{Aptos}[
Path = psipresentation/fonts/Aptos/,
Extension = .ttf,
UprightFont = *-Regular,
BoldFont = *-Bold,
ItalicFont = *-Italic,
BoldItalicFont = *-Bold-Italic
]
\setmonofont{AptosMono}[
Path = psipresentation/fonts/AptosMono/,
Extension = .ttf,
UprightFont = *-Regular,
BoldFont = *-Bold,
ItalicFont = *-Italic,
BoldItalicFont = *-Bold-Italic
]
\input{psipresentation/psicolors}
% boxes
\setbeamerfont{block title}{series=\bfseries, size=\normalsize}
\setbeamercolor{block title}{fg=black, bg=white}
% lists
\setlength{\leftmargini}{10pt}
\setlength{\leftmarginii}{10pt}
\setlength{\leftmarginiii}{10pt}
\newcommand\ibullet{\raisebox{-0.2em}{\scalebox{2.2}{$\cdot$}}}
\setbeamertemplate{itemize item}{\ibullet}
\setbeamertemplate{itemize subitem}{\ibullet}
\setbeamertemplate{itemize subsubitem}{\ibullet}
\setbeamercolor{itemize item}{fg=black}
\setbeamercolor{itemize subitem}{fg=black}
\setbeamercolor{itemize subsubitem}{fg=black}
\setbeamercolor{enumerate item}{fg=black}
\setbeamercolor{enumerate subitem}{fg=black}
\setbeamercolor{enumerate subsubitem}{fg=black}
% title page
\newcommand{\TPtextleftedge}{0.056}
\newcommand{\TPlogowidth}{0.14}
\newcommand{\TPlogoupperedge}{0.84}
\newcommand{\TPbottomboxheight}{0.27}
\newcommand{\TPimageheight}{0.78}
\newcommand{\TPtitleypos}{4.65}
\newcommand{\TPsubtitleypos}{3.8}
\newcommand{\TPauthorypos}{1.1}
\newcommand{\TPlocationdateypos}{0.75}
\newcommand{\TPcenterforwidth}{0.195}
\newcommand{\TPcenterforleftedge}{0.208}
\newcommand{\TPcenterforupperedge}{0.8615}
\colorlet{TPauthorfont}{white}
\colorlet{TPdatefont}{white}
\defbeamertemplate*{title page}{PSI}[1][]
{
\begin{tikzpicture}[overlay, remember picture, shift={(current page.south west)}] % use the whole page
\ifx \inserttitleimage \empty
\colorlet{TPtitlefont}{white}
\colorlet{TPsubtitlefont}{white}
\newcommand{\TPlogocolor}{white}
\newcommand{\TPtextwidth}{0.66}
\node[inner sep=0pt, anchor=south west] (bkg) at (-0.01, -0.01) {
\includegraphics[height=\paperheight]{psipresentation/imgs/bkgs/\inserttitlecolor}
};
\else
\colorlet{TPtitlefont}{black}
\colorlet{TPsubtitlefont}{black}
\newcommand{\TPlogocolor}{black}
\newcommand{\TPtextwidth}{0.43}
\fill[\inserttitlecolor] (0, \TPbottomboxheight\paperheight) rectangle ++(\paperwidth, -\paperheight); % bottom color box
\node[inner sep=0pt, anchor=west] (image) at (\paperwidth/2 + 5, \paperheight/2 + 5) {
\includegraphics[height=\TPimageheight\paperheight]{\inserttitleimage}
};
\fi
\node[inner sep=0pt, anchor=south west] (psi-logo) at (\TPtextleftedge\paperwidth, \TPlogoupperedge\paperheight) {
\includegraphics[width=\TPlogowidth\paperwidth]{psipresentation/imgs/logos/psi-logo-\TPlogocolor}
};
\ifx \insertcenterfor \empty \else
\node[inner sep=0pt, anchor=south west] (centerfortext) at (\TPcenterforleftedge\paperwidth, \TPcenterforupperedge\paperheight) {
\rlap{\fontsize{6}{6}\selectfont\textbf{\textcolor{TPtitlefont}{%
\parbox[t]{\TPcenterforwidth\paperwidth}{%
Center for \insertcenterfor%
}
}}}};
\fi
%TODO: make the following a command?
\node[inner sep=0pt, anchor=south] (titletext) at (\TPtextleftedge\paperwidth, \TPtitleypos) {
\rlap{\huge\textbf{\textcolor{TPtitlefont}{%
\parbox[t]{\TPtextwidth\paperwidth}{%
\inserttitle%
}
}}}};
\node[inner sep=0pt] (subtitletext) at (\TPtextleftedge\paperwidth, \TPsubtitleypos) {
\rlap{\large\textbf{\textcolor{TPsubtitlefont}{%
\parbox[t]{\TPtextwidth\paperwidth}{%
\insertsubtitle{}%
}
}}}};
\node[inner sep=0pt] (authortext) at (\TPtextleftedge\paperwidth, \TPauthorypos) {
\rlap{\footnotesize{\textcolor{TPauthorfont}{%
\parbox[t]{\TPtextwidth\paperwidth}{%
\insertauthor{}%
}
}}}};
\node[inner sep=0pt] (locationdatetext) at (\TPtextleftedge\paperwidth, \TPlocationdateypos) {
\rlap{\footnotesize{\textcolor{TPdatefont}{
\parbox[t]{\TPtextwidth\paperwidth}{%
\insertlocation, \insertdate%
}
}}}};
\end{tikzpicture}
}
% frame
\newcommand{\FRheaderheight}{0.09}
\newcommand{\FRlogowidth}{0.075}
\newcommand{\FRlogoupperedge}{0.96}
\newcommand{\FRlogorightedge}{0.94}
\newcommand{\FRlogocolor}{black}
\newcommand{\FRtitleupperedge}{0.95}
\newcommand{\FRtitleleftedge}{0.055}
\newcommand{\FRtitlewidth}{0.75}
\newcommand{\FRfooterupperedge}{0.06}
\newcommand{\FRfooterauthorleftedge}{\FRtitleleftedge}
\newcommand{\FRfooterinstituteleftedge}{0.12}
\newcommand{\FRfooterdaterightedge}{0.94} % 1 - 0.06
\colorlet{FRtitlefont}{black}
\colorlet{FRfooterfont}{black}
\setbeamertemplate{frametitle}
{
\begin{tikzpicture}[overlay, remember picture, shift={(current page.south west)}] % use the whole page
\node[inner sep=0pt, anchor=north east] (psi-logo) at (\FRlogorightedge\paperwidth, \FRlogoupperedge\paperheight) {
\includegraphics[width=\FRlogowidth\paperwidth]{psipresentation/imgs/logos/psi-logo-\FRlogocolor}
};
\node[inner sep=0pt, anchor=north west] (frame-title) at (\FRtitleleftedge\paperwidth, \FRtitleupperedge\paperheight) {
\parbox[t]{\FRtitlewidth\paperwidth}{%
\textcolor{FRtitlefont}{\large\textbf{\insertframetitle}}%
}
};
\node[inner sep=0pt, anchor=west] (page-num) at (\FRfooterauthorleftedge\paperwidth, \FRfooterupperedge\paperheight) {
\textcolor{FRfooterfont}{\tiny\insertframenumber}
};
\node[inner sep=0pt, anchor=west] (institute) at (\FRfooterinstituteleftedge\paperwidth, \FRfooterupperedge\paperheight) {
\textcolor{FRfooterfont}{\tiny \ifx \insertcenterfor \empty \insertinstitute \else PSI \insertcenterfor \fi}
};
\node[inner sep=0pt, anchor=east] (author) at (\FRfooterdaterightedge\paperwidth, \FRfooterupperedge\paperheight) {
\textcolor{FRfooterfont}{\tiny\insertdate}
};
\end{tikzpicture}
% since the above is all overlay, simply add enough space to cover the head
\vskip\FRheaderheight\paperheight
}
% section divider
\newenvironment{divider}[2]{
% #1 background color
% #2 font and logo color (white or black)
\setbeamercolor{background canvas}{bg=#1}
\colorlet{FRtitlefont}{#2}
\colorlet{FRfooterfont}{#2}
\setbeamercolor{normal text}{fg=#2}
\usebeamercolor[fg]{normal text}
\renewcommand{\FRlogocolor}{#2} % can only be black or white
\begin{frame}[environment=divider,t]{\empty}
\huge
}{
\end{frame}
}
% colored tables
\newenvironment{ctabular}[3]{
% #1 tabular options
% #2 row background color
% #3 header font color
\newcolumntype{L}{>{\ifnumequal{\rownum}{1}{\bfseries\color{#3}}}l}
\newcolumntype{C}{>{\ifnumequal{\rownum}{1}{\bfseries\color{#3}}}c}
\newcolumntype{R}{>{\ifnumequal{\rownum}{1}{\bfseries\color{#3}}}r}
\rowcolors{2}{#2!20}{#2!10}
\begin{tabular}{#1}
\rowcolor{#2}
}{
\end{tabular}
}