From 44206d0cf00b14e9d8236854b334d21845143ed8 Mon Sep 17 00:00:00 2001 From: Quentin Guilloteau <Quentin.Guilloteau@inria.fr> Date: Wed, 12 Apr 2023 12:27:06 +0200 Subject: [PATCH] start some slides --- flake.nix | 18 ++ slides/figs/mapek.jpg | Bin 0 -> 26995 bytes slides/main.md | 133 +++++++++++++ slides/sty/beamercolorthemeshark.sty | 187 ++++++++++++++++++ slides/sty/beamerinnerthemechamfered.sty | 232 ++++++++++++++++++++++ slides/sty/beamerouterthemewuerzburg.sty | 214 +++++++++++++++++++++ slides/sty/cbfcolors.sty | 29 +++ slides/template.tex | 235 +++++++++++++++++++++++ 8 files changed, 1048 insertions(+) create mode 100644 slides/figs/mapek.jpg create mode 100644 slides/main.md create mode 100644 slides/sty/beamercolorthemeshark.sty create mode 100644 slides/sty/beamerinnerthemechamfered.sty create mode 100644 slides/sty/beamerouterthemewuerzburg.sty create mode 100644 slides/sty/cbfcolors.sty create mode 100644 slides/template.tex diff --git a/flake.nix b/flake.nix index 5dee6e0..1cb78b8 100644 --- a/flake.nix +++ b/flake.nix @@ -39,6 +39,24 @@ fromImage = flakeImage; contents = with pkgs; [ mdbook mdbook-mermaid mdbook-admonish ]; # mdbook-linkcheck pour checker la validiter des liens }; + + slides = pkgs.stdenv.mkDerivation { + name = "slides-tuto"; + src = ./slides; + buildInputs = with pkgs; [ + texlive.combined.scheme-full + pandoc + rubber + ]; + buildPhase = '' + pandoc --from=markdown --to=beamer --slide-level=1 --template=template.tex --output=main.tex main.md + rubber -d main.tex + ''; + installPhase = '' + mkdir -p $out + cp main.pdf $out/slides.pdf + ''; + }; }; diff --git a/slides/figs/mapek.jpg b/slides/figs/mapek.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e026e038fb615c5f7466e1be85d217d59acf970 GIT binary patch literal 26995 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 R8{IS*Ub>2;HQ4{Z2>{3iFVFx0 literal 0 HcmV?d00001 diff --git a/slides/main.md b/slides/main.md new file mode 100644 index 0000000..166bcdd --- /dev/null +++ b/slides/main.md @@ -0,0 +1,133 @@ +--- +title: 'Under Control: A Control Theory introduction for Computer Scientists' +short_title: 'Under Control: A Control Theory introduction for Computer Scientists' +subtitle: 'First try' +date: 21/04/2023 +affiliations: + - name: UGA, INRIA + mark: '' + signature: 'Univ. Grenoble Alpes, INRIA, CNRS, LIG' + email: 'firstname.lastname@inria.fr' + authors: + - firstname: Quentin + lastname: Guilloteau + is_presenter: true + - firstname: Raphaƫl + lastname: Bleuse + - firstname: Eric + lastname: Rutten +header-includes: + - \usepackage{tikz} + - \usepackage{subcaption} + - \usepackage{MnSymbol,wasysym} +# lang: en +--- + +# Goal of this tutorial + +- Present the need for regulation of computing systems + +- Show how computing systems can benefit from the Feedback loop approach + +- Show what Control Theory can bring + +- Quick presentation of the methodology + +- Let you implement some Control Theory controllers! + + +# The need for Regulation + +- Complex systems + + - Crazy software stacks on crazy hardware + + - $\rightsquigarrow$ unpredictable + + - but want to guarantee a behavior, a Quality-of-Serive + +- Usual approaches: + + - simple rules + + - *if this then that* + + - very arbitrary constants + + - no guarantee + + - or model as much as possible + + - then solve "optimally" + + - very complex + + - guarantee only if model stands + +\begin{center} +\textbf{We need another approach} (guarantees + simplicity) +\end{center} + + +# The Feedback Loop + +## The idea + +Use the knowledge about the current state of the system to respond + +## Autonomic Computing (IBM 2003) + +:::::::::::::: {.columns} +::: {.column width="50%"} +{width=70% height=35%} +::: +::: {.column width="50%"} + + +- auto-* + + - configuration + + - healing + + - **optimization** + + - protection + +- main tool: MAPE-K loop + +- $\neq$ implementations of Autonomic Controller (rules, AI, control) + + +::: +:::::::::::::: + + + +# Control Theory + + +# Your turn! + +## What you will do now + +1. Play with a dummy system + +2. Implement a naive "Bang-Bang" controller + +3. First introduction with Control Theory: P Controller + +4. Implement a more precise controller (PI) + +5. Perform an identification phase + +6. **Implement a PI controller on a "real" system** + + +## Starting Point + + +\begin{center} +\url{https://tinyurl.com/CtrlComputing} +\end{center} + diff --git a/slides/sty/beamercolorthemeshark.sty b/slides/sty/beamercolorthemeshark.sty new file mode 100644 index 0000000..d0ddefd --- /dev/null +++ b/slides/sty/beamercolorthemeshark.sty @@ -0,0 +1,187 @@ +% LaTeX Beamer color theme "shark" +% +% Copyright Christian Gogolin 2011 (beamer@cgogolin.de) +% +% http://www.cgogolin.de +% +% This program is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see <http://www.gnu.org/licenses/>. +% +% features: - A dignified, clear look that directs the listeners +% attention to the content. +% - A very light gray background that puts emphasis on the +% content of block like environments. +% +% problems: - Looks bad in combination with the "smothbars" outer +% theme. + +\mode<presentation> + +\definecolor{beamer@blendedblue}{rgb}{0.23,0.4,0.7}% use structure theme to change + +\setbeamercolor{normal text}{fg=black,bg=white} +\setbeamercolor{alerted text}{fg=red} +\setbeamercolor{example text}{fg=green!50!black} + +\setbeamercolor{structure}{fg=beamer@blendedblue,bg=white} + +\setbeamercolor{background canvas}{fg=black,bg=white} +\setbeamercolor{background}{parent=background canvas} + +\setbeamercolor{palette primary}{use=structure,fg=structure.fg} +\setbeamercolor{palette secondary}{use=structure,fg=structure.fg!70!black,bg=white!80!black} +\setbeamercolor{palette tertiary}{fg=white,bg=white!20!black} +\setbeamercolor{palette quaternary}{fg=white,bg=white!5!black} + +\setbeamercolor{palette sidebar primary}{use=normal text,fg=normal text.fg} +\setbeamercolor{palette sidebar secondary}{use=structure,fg=structure.fg} +\setbeamercolor{palette sidebar tertiary}{use=normal text,fg=normal text.fg} +\setbeamercolor{palette sidebar quaternary}{use=structure,fg=structure.fg} + +\setbeamercolor{math text}{} +\setbeamercolor{math text inlined}{parent=math text} +\setbeamercolor{math text displayed}{parent=math text} + +\setbeamercolor{normal text in math text}{} + +\setbeamercolor{local structure}{parent=structure} + +\setbeamercolor{titlelike}{parent=structure} + +\setbeamercolor{title}{parent=titlelike} +\setbeamercolor{title in head/foot}{parent=palette quaternary} +\setbeamercolor{title in sidebar}{use=palette tertiary,fg=palette tertiary.fg,bg=palette tertiary.bg} + +\setbeamercolor{subtitle}{parent=title} + +\setbeamercolor{author}{} +\setbeamercolor{author in head/foot}{parent=palette primary} +\setbeamercolor{author in sidebar}{use=palette tertiary,fg=palette tertiary.fg,bg=palette tertiary.bg}%{use=palette sidebar tertiary,fg=palette sidebar tertiary.fg} + +\setbeamercolor{institute}{} +\setbeamercolor{institute in head/foot}{parent=palette tertiary} +\setbeamercolor{institute in sidebar}{use=palette sidebar tertiary,fg=palette sidebar tertiary.fg} + +\setbeamercolor{date}{} +\setbeamercolor{date in head/foot}{parent=palette secondary} +\setbeamercolor{date in sidebar}{use=palette sidebar tertiary,fg=palette sidebar tertiary.fg} + +\setbeamercolor{titlegraphic}{} + +\setbeamercolor{part name}{} +\setbeamercolor{part title}{parent=titlelike} + +\setbeamercolor{section in toc}{parent=structure} +\setbeamercolor{section in toc shaded}{parent=section in toc} +\setbeamercolor{section in head/foot}{parent=palette tertiary} +\setbeamercolor{section in sidebar}{parent=background canvas}%{parent=palette sidebar secondary} +\setbeamercolor{section in sidebar shaded}{use=section in sidebar,fg=section in sidebar.fg!40!bg} +\setbeamercolor{section number projected}{parent=item projected} + +\setbeamercolor{subsection in toc}{} +\setbeamercolor{subsection in toc shaded}{parent=subsection in toc} +\setbeamercolor{subsection in head/foot}{parent=palette secondary} +\setbeamercolor{subsection in sidebar}{parent=section in sidebar} +\setbeamercolor{subsection in sidebar shaded}{parent=section in sidebar shaded} +\setbeamercolor{subsection number projected}{parent={subitem projected}} + +\setbeamercolor{subsubsection in toc}{parent=subsection in toc} +\setbeamercolor{subsubsection in toc shaded}{parent=subsubsection in toc} +\setbeamercolor{subsubsection in head/foot}{parent=subsection in head/foot} +\setbeamercolor{subsubsection in sidebar}{parent=subsection in sidebar} +\setbeamercolor{subsubsection in sidebar shaded}{parent=subsection in sidebar shaded} +\setbeamercolor{subsubsection number projected}{parent=subsubitem projected} + +\setbeamercolor{headline}{} +\setbeamercolor{footline}{} + +\setbeamercolor{sidebar}{use=palette tertiary,fg=palette tertiary.fg,bg=palette tertiary.bg} +\setbeamercolor{sidebar left}{parent=sidebar} +\setbeamercolor{sidebar right}{parent=sidebar} + +\setbeamercolor{logo}{parent=palette tertiary} + +\setbeamercolor{frametitle}{parent=titlelike} +\setbeamercolor{framesubtitle}{parent=frametitle} + +\setbeamercolor{frametitle right}{parent=frametitle} + +\setbeamercolor{caption}{} +\setbeamercolor{caption name}{parent=structure} + +\setbeamercolor{button}{use=local structure,bg=local structure.fg!50!bg,fg=white} +\setbeamercolor{button border}{use=button,fg=button.bg} +\setbeamercolor{navigation symbols}{use=structure,fg=structure.fg!40!bg} +\setbeamercolor{navigation symbols dimmed}{use=structure,fg=structure.fg!20!bg} +\setbeamercolor{mini frame}{parent=section in head/foot} + +\setbeamercolor{block body}{} +\setbeamercolor{block body alerted}{} +\setbeamercolor{block body example}{} +\setbeamercolor{block title}{parent=structure} +\setbeamercolor{block title alerted}{parent=alerted text} +\setbeamercolor{block title example}{parent=example text} + +\setbeamercolor{item}{parent=local structure} +\setbeamercolor{subitem}{parent=item} +\setbeamercolor{subsubitem}{parent=subitem} + +\setbeamercolor{item projected}{parent=item,use=item,fg=white,bg=item.fg} +\setbeamercolor{subitem projected}{parent=item projected} +\setbeamercolor{subsubitem projected}{parent=subitem projected} + +\setbeamercolor{enumerate item}{parent=item} +\setbeamercolor{enumerate subitem}{parent=subitem} +\setbeamercolor{enumerate subsubitem}{parent=subsubitem} + +\setbeamercolor{itemize item}{parent=item} +\setbeamercolor{itemize subitem}{parent=subitem} +\setbeamercolor{itemize subsubitem}{parent=subsubitem} + +\setbeamercolor{itemize/enumerate body}{} +\setbeamercolor{itemize/enumerate subbody}{} +\setbeamercolor{itemize/enumerate subsubbody}{} + +\setbeamercolor{description item}{parent=item} + +\setbeamercolor{bibliography item}{parent=item} + +\setbeamercolor{bibliography entry author}{use=structure,fg=structure.fg} +\setbeamercolor{bibliography entry title}{use=normal text,fg=normal text.fg} +\setbeamercolor{bibliography entry location}{use=structure,fg=structure.fg!65!bg} +\setbeamercolor{bibliography entry note}{use=structure,fg=structure.fg!65!bg} + +\setbeamercolor{separation line}{} + +\setbeamercolor{upper separation line head}{parent=separation line} +\setbeamercolor{middle separation line head}{parent=separation line} +\setbeamercolor{lower separation line head}{parent=separation line} + +\setbeamercolor{upper separation line foot}{parent=separation line} +\setbeamercolor{middle separation line foot}{parent=separation line} +\setbeamercolor{lower separation line foot}{parent=separation line} + +\setbeamercolor{abstract}{} +\setbeamercolor{abstract title}{parent=structure} + +\setbeamercolor{verse}{} + +\setbeamercolor{quotation}{} +\setbeamercolor{quote}{parent=quotation} + +\setbeamercolor{page number in head/foot}{fg=fg!50!bg} + +\setbeamercolor{qed symbol}{parent=structure} + +\mode +<all> diff --git a/slides/sty/beamerinnerthemechamfered.sty b/slides/sty/beamerinnerthemechamfered.sty new file mode 100644 index 0000000..2d6c37e --- /dev/null +++ b/slides/sty/beamerinnerthemechamfered.sty @@ -0,0 +1,232 @@ +% LaTeX Beamer inner theme "chamfered" +% +% Copyright Christian Gogolin 2011 (beamer@cgogolin.de) +% +% http://www.cgogolin.de +% +% This program is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see <http://www.gnu.org/licenses/>. +% +% features: - Boxes with arbitrary rounding radius, content-to-box- +% boder and head-to-body distance, customizable via the +% [corners=] and [padding=] options. Both are set to a +% default value of 2pt. +% - A drop shadow that can be activated with the [shadow] +% option that is compatible with all box shapes(!). +% - A real drop shadow that can be activated with the [realshadow] +% option that is compatible with all box shapes(!) and is really opaque. +% - A surrounding outline can be activated by giving the +% [outline] options. +% - Draws the whole box "at once" (and not in two steps, as +% the normal beamer colorbox does) using the TikZ-Package +% and thus has a very easy to read code structure. +% +% problems: - Uses your TikZ-Package (Not really a problem, I think.) +% - Overwrites the "\beamerboxesrounded" and the +% "\endbeamerboxesrounded" commands. (Not really a problem +% as well, I think.) +% +% to do: - Jet no custom parts page and only a very minimal +% title page. +% - Perhaps add custom "items" and "sections/subsections in +% toc" templates. + +\RequirePackage{keyval} +\RequirePackage{tikz} +\RequirePackage{mathtools} + +\newif\ifbeamer@chamfered@shadow +\DeclareOptionBeamer{shadow}[true]{\csname beamer@chamfered@shadow#1\endcsname} +\ExecuteOptionsBeamer{shadow=false} + +\newif\ifbeamer@chamfered@realshadow +\DeclareOptionBeamer{realshadow}[true]{\csname beamer@chamfered@realshadow#1\endcsname} +\ExecuteOptionsBeamer{realshadow=fal1se} + +\newif\ifbeamer@chamfered@outline +\DeclareOptionBeamer{outline}[true]{\csname beamer@chamfered@outline#1\endcsname} +\ExecuteOptionsBeamer{outline=false} + +\newdimen\bmb@corners +\DeclareOptionBeamer{corners}{\bmb@corners=#1} +\ExecuteOptionsBeamer{corners=2pt} + +\newdimen\bmb@padding +\DeclareOptionBeamer{padding}{\bmb@padding=#1} +\ExecuteOptionsBeamer{padding=2pt} + +\ProcessOptionsBeamer + +\mode<presentation> + +\newdimen\bmb@headheight +\newdimen\bmb@headdepth +\newdimen\bmb@bodyheight +\newdimen\bmb@bodydepth +%\newdimen\bmb@corners +%\newdimen\bmb@padding +\newdimen\bmb@headbodyseperation + +\newlength{\tmpa} + +\newbox\bmb@headbox +\newbox\bmb@bodybox + +\define@key{beamerboxes}{realshadow}[false]{\csname bmb@realshadow#1\endcsname} +\define@key{beamerboxes}{outline}[false]{\csname bmb@outline#1\endcsname} + +\renewcommand\beamerboxesrounded[2][]{% + \global\let\beamer@firstlineitemizeunskip=\relax% + \vbox\bgroup% + \setkeys{beamerboxes}{upper=block title,lower=block body,width=\textwidth,shadow=false,realshadow=false}% + \setkeys{beamerboxes}{#1}% + {% + \usebeamercolor{\bmb@lower}% + \globalcolorstrue% + \colorlet{lower.bg}{bg}% + }% + {% + \usebeamercolor{\bmb@upper}% + \globalcolorstrue% + \colorlet{upper.bg}{bg}% + }% + % lengths are set via beameroptions +% \bmb@corners=2pt +% \bmb@padding=2pt + % + \setbox\bmb@headbox=\hbox{% + \begin{minipage}[b]{\bmb@width-\bmb@corners-\bmb@corners-\bmb@padding-\bmb@padding}% + \usebeamercolor[fg]{\bmb@upper}% + #2% + \end{minipage}}% + \ifdim\wd\bmb@headbox=0pt% + \setbox\bmb@headbox=\hbox{}% + \ht\bmb@headbox=0pt% + \dp\bmb@headbox=0pt% + \bmb@headheight=0pt% + \bmb@headdepth=1.4ex% + \bmb@headbodyseperation=0pt% + {\usebeamercolor{\bmb@lower}% make head and body bg color equal if head is empty + \globalcolorstrue% + \colorlet{upper.bg}{bg}}% + \else + \bmb@headheight=\ht\bmb@headbox + \bmb@headdepth=1.5ex% + \bmb@headbodyseperation=\bmb@padding + \fi% + + \setbox\bmb@bodybox=\hbox\bgroup\begin{minipage}[b]{\bmb@width-\bmb@corners-\bmb@corners-\bmb@padding-\bmb@padding}% + \usebeamercolor[fg]{\bmb@lower}% + \colorlet{beamerstructure}{upper.bg}% + \colorlet{structure}{upper.bg}% + } + + +\def\endbeamerboxesrounded{% + \end{minipage}\egroup% + + % Fix by Vasyl + \bmb@temp=\dp\bmb@bodybox% + \setbox\bmb@bodybox=\hbox{\raise\bmb@temp\hbox{\box\bmb@bodybox}}% + \dp\bmb@bodybox=0pt% + + \ifdim\wd\bmb@bodybox=0pt% + \setbox\bmb@bodybox=\hbox{}% + \ht\bmb@bodybox=0pt% + \dp\bmb@bodybox=0pt% + \bmb@bodyheight=1pt% + \bmb@bodydepth=\bmb@padding% + \else + \bmb@bodyheight=\ht\bmb@bodybox\advance\bmb@headheight by\bmb@corners + \bmb@bodydepth=1.5ex% + \fi% + + \begin{tikzpicture} + \ifbeamer@chamfered@shadow% + \foreach \x in {75,50,15} + { + \setlength{\tmpa}{1.25pt * 1/75 * \real{\x}} + \fill[xshift=0.4pt,yshift=-0.5pt,fill=lower.bg!\x!black,rounded corners=\bmb@corners] (-\tmpa,-\bmb@headdepth-\bmb@headbodyseperation) -- (-\tmpa,\bmb@headheight+\bmb@padding+0.5pt+\tmpa) -- (\bmb@width+\tmpa,\bmb@headheight+\bmb@padding+0.5pt+\tmpa) -- (\bmb@width+\tmpa,-\bmb@headdepth-\bmb@headbodyseperation) -- (\bmb@width+\tmpa,-\bmb@headdepth-\bmb@headbodyseperation-\bmb@bodyheight-\bmb@bodydepth-\bmb@padding-\bmb@corners-\tmpa) -- (-\tmpa,-\bmb@headdepth-\bmb@headbodyseperation-\bmb@bodyheight-\bmb@bodydepth-\bmb@padding-\bmb@corners-\tmpa) -- (-\tmpa,-\bmb@headdepth-\bmb@headbodyseperation); + } + \fi + + \ifbeamer@chamfered@realshadow% + \foreach \x in {75,50,15} + { + \setlength{\tmpa}{1.25pt * 1/75 * \real{\x}} + \fill[xshift=0.4pt,yshift=-0.5pt,fill=black,opacity=0.3,rounded corners=\bmb@corners] (-\tmpa,-\bmb@headdepth-\bmb@headbodyseperation) -- (-\tmpa,\bmb@headheight+\bmb@padding+0.5pt+\tmpa) -- (\bmb@width+\tmpa,\bmb@headheight+\bmb@padding+0.5pt+\tmpa) -- (\bmb@width+\tmpa,-\bmb@headdepth-\bmb@headbodyseperation) -- (\bmb@width+\tmpa,-\bmb@headdepth-\bmb@headbodyseperation-\bmb@bodyheight-\bmb@bodydepth-\bmb@padding-\bmb@corners-\tmpa) -- (-\tmpa,-\bmb@headdepth-\bmb@headbodyseperation-\bmb@bodyheight-\bmb@bodydepth-\bmb@padding-\bmb@corners-\tmpa) -- (-\tmpa,-\bmb@headdepth-\bmb@headbodyseperation); + } + \fi + + \ifbeamer@chamfered@outline% The 1pt offset added to \bmb@headdepth is a hack to fix the rounding errors of some stupid pdf viewers! + \filldraw[fill=upper.bg,draw=structure.fg,thin,rounded corners=\bmb@corners] (0pt,-\bmb@headdepth-1pt) -- (0pt,\bmb@headheight+\bmb@padding+0.5pt) -- (\bmb@width,\bmb@headheight+\bmb@padding+0.5pt) -- (\bmb@width,-\bmb@headdepth-1pt); + \filldraw[fill=lower.bg,draw=structure.fg,thin,rounded corners=\bmb@corners] (\bmb@width,-\bmb@headdepth+1pt) -- (\bmb@width,-\bmb@headdepth-\bmb@headbodyseperation-\bmb@bodyheight-\bmb@bodydepth-\bmb@padding-\bmb@corners) -- (0pt,-\bmb@headdepth-\bmb@headbodyseperation-\bmb@bodyheight-\bmb@bodydepth-\bmb@padding-\bmb@corners) -- (0pt,-\bmb@headdepth+1pt); + \else + \fill[fill=upper.bg,rounded corners=\bmb@corners] (0pt,-\bmb@headdepth-1pt) -- (0pt,\bmb@headheight+\bmb@padding+0.5pt) -- (\bmb@width,\bmb@headheight+\bmb@padding+0.5pt) -- (\bmb@width,-\bmb@headdepth-1pt); + \fill[fill=lower.bg,rounded corners=\bmb@corners] (\bmb@width,-\bmb@headdepth+1pt) -- (\bmb@width,-\bmb@headdepth-\bmb@headbodyseperation-\bmb@bodyheight-\bmb@bodydepth-\bmb@padding-\bmb@corners) -- (0pt,-\bmb@headdepth-\bmb@headbodyseperation-\bmb@bodyheight-\bmb@bodydepth-\bmb@padding-\bmb@corners) -- (0pt,-\bmb@headdepth+1pt); + \fi + \pgfputat{\pgfpoint{\bmb@padding+\bmb@corners}{0pt}}{\pgftext[left,base]{\copy\bmb@headbox}} + \pgfputat{\pgfpoint{\bmb@padding+\bmb@corners}{-\bmb@headdepth-\bmb@headbodyseperation-\bmb@bodyheight}}{\pgftext[left,base]{\copy\bmb@bodybox}} + \end{tikzpicture} + \egroup% of \vbox\bgroup +} + + + + +\defbeamertemplate*{title page}{chamfered}[1][] +{ + \vbox{} + \vfill + \begin{centering} + \begin{centering} + \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle\par% + \ifx\insertsubtitle\@empty% + \else% + \vskip0.25em% + {\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle}\insertsubtitle\par}% + \fi% + \end{centering} + \vskip1.5em\par + \begin{centering} + \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor + \end{centering} + \vskip1em\par + \begin{centering} + \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute + \end{centering} + \vskip1em\par + \begin{centering} + \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate + \end{centering}\vskip0.5em + {\usebeamercolor[fg]{titlegraphic}\inserttitlegraphic\par} + \end{centering} + \vfill +} + + + + +\setbeamertemplate{sections/subsections in toc}[square] +\setbeamertemplate{items}[square] +\setbeamertemplate{blocks}[rounded] + +\setbeamertemplate{title page}[chamfered] +\setbeamertemplate{part page}[default] + + +\mode<all> + +%%% Local Variables: +%%% TeX-master: "~/texmf/tex/latex/beamer/test/test.tex" +%%% End: diff --git a/slides/sty/beamerouterthemewuerzburg.sty b/slides/sty/beamerouterthemewuerzburg.sty new file mode 100644 index 0000000..7b14f3a --- /dev/null +++ b/slides/sty/beamerouterthemewuerzburg.sty @@ -0,0 +1,214 @@ +% LaTeX Beamer outer theme "wuerzburg" +% +% Copyright Christian Gogolin 2011 (beamer@cgogolin.de) +% +% http://www.cgogolin.de +% +% This program is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see <http://www.gnu.org/licenses/>. +% +% features: - Two info lines at the head and at the bottom +% that provide information similar to the "infolines" outer +% theme. +% - An optional "polished" look (activated by the [glossy] +% option). +% - Drop shadows to separate the head/foot line and the +% frametitle from the frame content. +% - Suppresses the shadow on and below the frame title if +% the "frametitle" color is not set and thus respects the +% intention of some color themes to make the frame title +% appear as a part of the frame content. +% - A condensed frame title, that leaves more space for the +% frame content. +% - Vertical bars that separate the the items in the head/foot +% line that can be deactivated by specifying the +% [noseperators] option. +% - Exclude frames (for example supplementary material in the +% appendix) from the total number of frames by specifying the +% [lastframe=] option. +% - The [nofootline] option can be used to suppress drawing of +% the foot line. +% +% problems: - The glossy style does not fit well with all color themes. +% - This theme does not work well with the "inmargin" inner +% theme. The dropshadow of the frame title is to long. +% (I think this could be fixed.) + +\newif\ifbeamer@wuerzburg@glossy +\DeclareOptionBeamer{glossy}[true]{\csname beamer@wuerzburg@glossy#1\endcsname} + +\newif\ifbeamer@wuerzburg@nofootline +\DeclareOptionBeamer{nofootline}[true]{\csname beamer@wuerzburg@nofootline#1\endcsname} + +\newif\ifbeamer@wuerzburg@noseperators +\DeclareOptionBeamer{noseperators}[true]{\csname beamer@wuerzburg@noseperators#1\endcsname} + +\newcounter{lastframecounter} +\DeclareOptionBeamer{lastframe}{\setcounter{lastframecounter}{#1}} +%\ExecuteOptionsBeamer{\setcounter{lastframecounter}{0}} + + +\ProcessOptionsBeamer + +\mode<presentation> + +\setbeamercolor*{headfoot}{parent=palette tertiary} + +\AtBeginDocument{ + + \pgfdeclareverticalshading{beamer@topshade}{\paperwidth}{% + color(0pt)=(bg); + color(1pt)=(black!55!bg); + color(3pt)=(black!70!bg)} + \pgfdeclareverticalshading{beamer@bottomshade}{\paperwidth}{% + color(0pt)=(black!40!bg); + color(1pt)=(bg)} + {\usebeamercolor{frametitle} + \pgfdeclareverticalshading{beamer@frametitletopmshade}{\paperwidth}{% + color(0pt)=(bg); + color(1.5pt)=(black!75!bg)}} + \pgfdeclareverticalshading{beamer@frametitlebottomshade}{\paperwidth}{% + color(0pt)=(bg); + color(1.5pt)=(black!75!bg)} + {\usebeamercolor{headfoot}\usebeamerfont{author in head/foot} + \pgfdeclareverticalshading{beamer@headfootshade}{\paperwidth}{% + color(0.0ex)=(black!30!bg); + color(0.8ex)=(black!20!bg); + color(1.0ex)=(bg); + color(1.2ex)=(white!10!bg); + color(2.0ex)=(white!20!bg)}} + + \newcommand{\beamerwuerzburgthemeadddelimiter}[1]{% + \setbox\beamer@tempbox=\hbox{#1}% + \ifdim\wd\beamer@tempbox>1pt% + \ifbeamer@wuerzburg@noseperators% + \hskip1.5ex + \else% + {\usebeamercolor[fg]{frametitle}\textbar} + \fi + #1 + \fi% + } +} + +\defbeamertemplate*{footline}{wuerzburg theme} +{ + \ifbeamer@wuerzburg@nofootline + \else + \leavevmode% + \pgfuseshading{beamer@bottomshade} + \ifbeamer@wuerzburg@glossy% + \pgfuseshading{beamer@headfootshade} + \vskip-3.5ex + \hbox{% + \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex,left,ignorebg]{headfoot}% + {\usebeamerfont{author in head/foot}\hspace*{3.5ex}\insertshortauthor{} \beamerwuerzburgthemeadddelimiter{\insertshortinstitute} \beamerwuerzburgthemeadddelimiter{\insertshortdate}} + \end{beamercolorbox}\hspace{-15ex}% + \begin{beamercolorbox}[wd=15ex,ht=2.25ex,dp=1ex,right,ignorebg]{headfoot}% + {\usebeamerfont{date in head/foot} +% \insertframenumber{} / \inserttotalframenumber \hspace*{3.5ex} + \insertframenumber{} / \if\thelastframecounter0\inserttotalframenumber\else\thelastframecounter\fi \hspace*{3.5ex}} + \end{beamercolorbox}} + \else% + \hbox{% + \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex,left]{headfoot}% + {\usebeamerfont{author in head/foot}\hspace*{3.5ex}\insertshortauthor{} \beamerwuerzburgthemeadddelimiter{\insertshortinstitute} \beamerwuerzburgthemeadddelimiter{\insertshortdate}} + \end{beamercolorbox}\hspace{-15ex}% + \begin{beamercolorbox}[wd=15ex,ht=2.25ex,dp=1ex,right]{headfoot}% + {\usebeamerfont{date in head/foot} +% \insertframenumber{} / \inserttotalframenumber\hspace*{3.5ex} + \insertframenumber{} / \if\thelastframecounter0\inserttotalframenumber\else\thelastframecounter\fi \hspace*{3.5ex}} + \end{beamercolorbox}} + \fi% + \vskip0pt% + \fi +} + +\defbeamertemplate*{headline}{wuerzburg theme} +{ + \leavevmode% + \ifbeamer@wuerzburg@glossy% + \pgfuseshading{beamer@headfootshade} + \vskip-3.5ex + \hbox{% + \begin{beamercolorbox}[wd=1.0\paperwidth,ht=2.25ex,dp=1ex,left,ignorebg]{headfoot}% + \usebeamerfont{section in head/foot}\hspace*{3.5ex}% + \insertshorttitle\ % + \beamerwuerzburgthemeadddelimiter{\insertsectionhead}% + \beamerwuerzburgthemeadddelimiter{\insertsubsectionhead}% + \beamerwuerzburgthemeadddelimiter{\insertsubsubsectionhead}% + \end{beamercolorbox}% + \ifbeamer@wuerzburg@nofootline% + \hspace{-15ex}% + \begin{beamercolorbox}[wd=15ex,ht=2.25ex,dp=1ex,right,ignorebg]{headfoot}% + {\usebeamerfont{date in head/foot} + % \insertframenumber{} / \inserttotalframenumber \hspace*{3.5ex} + \insertframenumber{} / \if\thelastframecounter0\inserttotalframenumber\else\thelastframecounter\fi \hspace*{3.5ex}} + \end{beamercolorbox}\fi}% + \else% + \hbox{% + \begin{beamercolorbox}[wd=1.0\paperwidth,ht=2.25ex,dp=1ex,left]{headfoot}% + \usebeamerfont{section in head/foot}\hspace*{3.5ex}% + \insertshorttitle\ % + \beamerwuerzburgthemeadddelimiter{\insertsectionhead}% + \beamerwuerzburgthemeadddelimiter{\insertsubsectionhead}% + \beamerwuerzburgthemeadddelimiter{\insertsubsubsectionhead}% + \end{beamercolorbox}% + \ifbeamer@wuerzburg@nofootline% + \hspace{-12ex}% + \begin{beamercolorbox}[wd=12ex,ht=2.25ex,dp=1ex,right,ignorebg]{headfoot}% + {\usebeamerfont{date in head/foot} + % \insertframenumber{} / \inserttotalframenumber \hspace*{3.5ex} + \insertframenumber{} / \if\thelastframecounter0\inserttotalframenumber\else\thelastframecounter\fi \hspace*{3.5ex}} + \end{beamercolorbox}\fi}% + \fi% + \vskip0pt% + \pgfuseshading{beamer@topshade} + \vskip-3pt +} + +\defbeamertemplate*{frametitle}{wuerzburg theme}[1][left] +{ + \nointerlineskip + \ifbeamercolorempty[bg]{frametitle}{\vskip0.5ex}{% + \hbox to\textwidth{\hskip-\Gm@lmargin\pgfuseshading{beamer@frametitletopmshade}\hskip-\Gm@rmargin} + \nointerlineskip% + }% + \@tempdima=\textwidth% + \advance\@tempdima by\beamer@leftmargin% + \advance\@tempdima by\beamer@rightmargin% + \begin{beamercolorbox}[sep=0.3cm,#1,wd=\the\@tempdima]{frametitle} + \usebeamerfont{frametitle}% + \vbox{}\vskip-1.7ex% + \if@tempswa\else\csname beamer@fte#1\endcsname\fi% + \strut\insertframetitle\strut\par% + {% + \ifx\insertframesubtitle\@empty% + \else% + {\usebeamerfont{framesubtitle}\usebeamercolor[fg]{framesubtitle}\insertframesubtitle\strut\par}% + \fi + }% + \vskip-1.3ex% + \if@tempswa\else\vskip-.3cm\fi% set inside beamercolorbox... evil here... + \end{beamercolorbox}% + \nointerlineskip + \ifbeamercolorempty[bg]{frametitle}{}{% + \hbox to\textwidth{\hskip-\Gm@lmargin\pgfuseshading{beamer@frametitlebottomshade}\hskip-\Gm@rmargin}% + \vskip-1.5pt% + }% +} + +\setbeamersize{text margin left=1em,text margin right=1em} + +\mode +<all> diff --git a/slides/sty/cbfcolors.sty b/slides/sty/cbfcolors.sty new file mode 100644 index 0000000..f5a86d8 --- /dev/null +++ b/slides/sty/cbfcolors.sty @@ -0,0 +1,29 @@ +% *** COLOR BLIND FRIENDLY PALETTE *** +% definition of colorblind friendly colors + +\NeedsTeXFormat{LaTeX2e}% +\ProvidesPackage{cbfcolors}% +[2017/06/12 v0.0.1 Palette of colorblind friendly colors] + +\RequirePackage{xcolor} + +% color definitions (cf. http://jfly.iam.u-tokyo.ac.jp/color/#pallet) +\definecolor{cbf.orange}{cmyk}{0,0.5,1,0} +\definecolor{cbf.skyblue}{cmyk}{0.8,0,0,0} +\definecolor{cbf.green}{cmyk}{0.97,0,0.75,0} +\definecolor{cbf.yellow}{cmyk}{0.1,0.05,0.9,0} +\definecolor{cbf.blue}{cmyk}{1,0.5,0,0} +\definecolor{cbf.vermillion}{cmyk}{0,0.8,1,0} +\definecolor{cbf.purple}{cmyk}{0.1,0.7,0,0} +\definecolor{cbf.gray}{cmyk}{0,0,0,0.4} +\definecolor{cbf.black}{cmyk}{0,0,0,1} + +% useful aliases +\colorlet{cbf.0}{cbf.gray} +\colorlet{cbf.1}{cbf.orange} +\colorlet{cbf.2}{cbf.skyblue} +\colorlet{cbf.3}{cbf.green} +\colorlet{cbf.4}{cbf.yellow} +\colorlet{cbf.5}{cbf.blue} +\colorlet{cbf.6}{cbf.vermillion} +\colorlet{cbf.7}{cbf.purple} diff --git a/slides/template.tex b/slides/template.tex new file mode 100644 index 0000000..de68528 --- /dev/null +++ b/slides/template.tex @@ -0,0 +1,235 @@ +%!TEX encoding = UTF-8 Unicode + +% rubber: path ./figs// +% rubber: path ./sty// + +\documentclass[% + USenglish, % load default language last + %aspectratio=169, +]{beamer} + + +% === PACKAGES IMPORT / CONFIGURATION ========================================= + +% --- ENCODING / FONTS ----------------- + +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{textcomp} +\usepackage{lmodern} % vector fonts +% \usepackage{kpfonts} +% \usepackage{microtype} + +% --- i18n, l10n ----------------------- + +\usepackage{babel} +\usepackage[iso]{isodate} + +% --- GRAPHICS / FIGURES --------------- + +\usepackage{graphicx} +\usepackage{sty/cbfcolors} +% \usepackage{marvosym} % nice arrows +% \usepackage{standalone} +% \usepackage{tikz} + +% \usetikzlibrary{babel} % avoid annoying interaction of babel with tikz + +% --- ENHANCED TABLES ------------------ + +\usepackage{booktabs} % publication quality tables +% \usepackage{tabularx} % extended column syntax +% \usepackage{multirow} % mergeable rows + +% --- MATHEMATICS TYPESETTING ---------- + +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{amsthm} + +% --- SLIDES LAYOUT -------------------- + +% beamer theme by Christian Gogolin, see http://www.cgogolin.de/Computer.html +\usepackage[]{sty/beamerouterthemewuerzburg} +\usepackage[outline]{sty/beamerinnerthemechamfered} +\usepackage{sty/beamercolorthemeshark} + +\setbeamertemplate{navigation symbols}{} % remove navigation symbols +\setbeamerfont{footnote}{size=\scriptsize} % smaller footnote font + +% definition of transition slide +\newcommand{\transitionframe}{ + { + \renewcommand*{\insertsection}{} + \renewcommand*{\insertsubsection}{} + \renewcommand*{\insertsubsubsection}{} + %\begin{frame} + \tableofcontents[% + sectionstyle=show/shaded,% + subsectionstyle=show/show/shaded,% + subsubsectionstyle=show/show/show/shaded + ] + %\end{frame} + } +} + +\renewcommand{\textsc}{\uppercase} % small caps are incompatible with slides' font + +% --- BIBLIOGRAPHY --------------------- + +\usepackage[% + backend=biber, + safeinputenc, + citestyle=authoryear, + style = numeric, + bibstyle=phys, + maxcitenames=1, + maxbibnames=1, + sorting=nty, + hyperref=true, + isbn=false, + doi=false, + defernumbers=true, + giveninits=true, +]{biblatex} + +\renewcommand*{\mkbibnamefamily}[1]{\textsc{#1}} % capitalize last names +\renewcommand*{\mkbibnameprefix}[1]{\textsc{#1}} % capitalize prefix + +% ignore shorthand field +\DeclareSourcemap{% + \maps[datatype=bibtex]{\map{\step[fieldset=shorthand,null]}}% +} + +% custom environment without any label +\defbibenvironment{nolabel}% +{% + \list{}{% + \setlength{\leftmargin}{\bibhang}% + \setlength{\itemindent}{-\leftmargin}% + \setlength{\itemsep}{\bibitemsep}% + \setlength{\parsep}{\bibparsep}% + }% +}% +{\endlist}% +{\item} + +% custom inline cite command +\DeclareCiteCommand{\inlinecite}% +{\usebibmacro{prenote}}% +{% + \usebibmacro{citeindex}% + \usebibmacro{journal}% +}% +{\multicitedelim}% +{\usebibmacro{postnote}} + +% \addbibresource{$bibliography$} + +% --- MISC. PACKAGES ------------------- + +\usepackage{appendixnumberbeamer} % backup slides +\usepackage[strict=true]{csquotes} % advanced quotes +\usepackage[binary-units,per-mode=symbol]{siunitx} % correct units for physical quantities + + +% === MACROS DEFINITION ======================================================= + +% --- COMMON ABBREVIATIONS MACROS ------ + +% latin abbreviations, see: +% - http://www.sussex.ac.uk/informatics/punctuation/capsandabbr/abbr +% comment by Sascha Hunold, see also: +% - https://www.ieee.org/documents/style_manual.pdf +% (p. 32, Short Reference List of Italics) +% - http://web.ece.ucdavis.edu/~jowens/commonerrors.html + +\newcommand{\eg}{e.g.\@} +\newcommand{\ie}{i.e.\@} +\newcommand{\cf}{cf.\@} +\newcommand{\circa}{ca.\@} +\newcommand{\perse}{\emph{per~se}} +\newcommand{\adhoc}{\emph{ad~hoc}} +\newcommand{\sic}{\emph{sic}} +\newcommand{\versus}{\emph{vs.\@}} +\newcommand{\aka}{a.k.a.\@} +\newcommand{\resp}{resp.\@} +\newcommand{\wrt}{w.r.t.\@} + +\makeatletter +\newcommand{\etc}{etc\@ifnextchar.{}{.\@}} +\newcommand{\etal}{et~al\@ifnextchar.{}{.\@}} +\makeatother +\newcommand{\cluster}[1]{\texttt{#1\relax}} +\newcommand{\linear}[1]{\ensuremath{{#1}_L}} +% \newcommand{\unit}[1]{\ensuremath{\left[\si{#1}\right]}} + + +% --- MISC. HELPERS -------------------- + +\usepackage{hyperref} + +\newcommand{\email}[1]{\texttt{\href{mailto:#1}{#1}}} +\newcommand{\placeholder}[1]{% + \PackageWarning{placeholder}{`#1' is not defined}% + \texttt{#1}% +} + +% Pandoc header +$for(header-includes)$ +$header-includes$ +$endfor$ + + +% === META DATA =============================================================== + +\title[$short_title$]{$title$} +% +\subtitle{$subtitle$} +% +\author[% +$for(affiliations)$ +$for(affiliations.authors)$ +$if(affiliations.authors.is_presenter)$ +{$affiliations.authors.firstname$ \textsc{$affiliations.authors.lastname$}} +$endif$ +$endfor$ +$endfor$ +]{% +$for(affiliations)$ +$for(affiliations.authors)$ +$if(affiliations.authors.is_presenter)$ +{\underline{$affiliations.authors.firstname$~\textsc{$affiliations.authors.lastname$}}\textsuperscript{$affiliations.mark$}} +$else$ +{$affiliations.authors.firstname$~\textsc{$affiliations.authors.lastname$}\textsuperscript{$affiliations.mark$}} +$endif$ +$endfor$ +$endfor$ +} +\institute[ +$for(affiliations)$ +$affiliations.name$ $sep$, +$endfor$ +]{ +$for(affiliations)$ +\textsuperscript{$affiliations.mark$}$affiliations.signature$ \\ +\texttt{$affiliations.email$} +$endfor$ +} + +% +\newcommand{\talkdate}{$date$} +\date[\talkdate]{\printdate{\talkdate}} + + +% === DOCUMENT CONTENT ======================================================== + +\begin{document} + +\begin{frame}[plain] + \titlepage +\end{frame} + +$body$ + +\end{document} -- GitLab