308 lines
8.0 KiB
TeX
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}
|
|
}
|
|
|
|
|
|
|