Commit 5effc582 authored by Cédric Ware's avatar Cédric Ware
Browse files

Reimplement frame title, add alignment options.

Fix typos.
parent 07bd4779
......@@ -90,19 +90,29 @@
\setlength{\tptframetitlesep}{6pt}
\setlength{\tptframetitlefriezeheight}{6pt}
\setlength{\tptframetitlefriezewidth}{24pt}
\setbeamercolor{frametitle}{fg=blue}
\setlength{\tptframetitlefriezesep}{4pt}
\setbeamercolor{frametitle}{fg=blue,bg=cyan!50!white}
\setbeamercolor{structure}{fg=blue}
\setbeamercolor{page in head/foot}{bg=blue}
\tptcalculateheadfoot
\begin{frame}
\frametitle{Moins encombré, et avec le nombre de pages}
\framesubtitle{... et d'autres couleurs !}
\frametitle{Moins encombré, et avec le nombre de pages
(... et d'autres couleurs !)}
\lipsum[3]
\end{frame}
}
\tptcalculateheadfoot
{
\tptthemekeys{align frametitle=subtitle bottom baseline}
\begin{frame}
\frametitle{Avec la frise alignée...}
\framesubtitle{... sur le sous-titre, voir la ligne%
\llap{\rule{20em}{0.4pt}}}
\lipsum[4]
\end{frame}
}
%------------------------------------------------------------------------------
\section[1e] { 1e Section }
......
......@@ -22,7 +22,10 @@
\newif\iftpt@titleaffiliation\tpt@titleaffiliationfalse
\newif\iftpt@affiliation\tpt@affiliationfalse
\tptthemekeys{%
infolines/.is if=tpt@infolines,
infolines/.code={%
\tpt@infolinestrue
\setlength{\tptframetitlefriezesep}{1.5mm}%
},
navsymbols/.is choice,
navsymbols/.default=left,
navsymbols/left/.style={navsymbols enable,navsymbols align=left},
......@@ -62,6 +65,28 @@
framecount/.default=true, % "framecount" seul veut dire "framecount=true"...
framecount=false, % ... mais par défaut il est mis à "false".
bodyframecount/.style={framecount=body},
alignframetitle/.style={%
alignframetitle@template=#1,
frame title yshift=0pt,
frame title yshift if subtitle=0pt,
},
alignframetitle/.value required,
alignframetitle@template/.code={%
\setbeamertemplate{frametitle content box}[#1]%
},
alignframetitle@template/.value required,
align frametitle/.style={alignframetitle=#1},
align frame title/.style={alignframetitle=#1},
frametitleyshift/.code={%
\setlength{\tptframetitleyshift}{#1}},
frametitleyshift/.value required,
frametitle yshift/.style={frametitleyshift=#1},
frame title yshift/.style={frametitleyshift=#1},
frametitleyshiftifsubtitle/.code={%
\setlength{\tptframetitleyshiftifsubtitle}{#1}},
frametitleyshiftifsubtitle/.value required,
frametitle yshift if subtitle/.style={frametitleyshiftifsubtitle=#1},
frame title yshift if subtitle/.style={frametitleyshiftifsubtitle=#1},
}
% \ProcessPgfOptions à la fin du package, après les définitions.
......@@ -360,44 +385,151 @@
%%%% En tête
% Frame title
%
% Titre du frame : dimensions.
%
\tpt@deflength{\tptframetitlesep}{3ex}
\tpt@deflength{\tptframetitlefriezesep}{5mm}
\tpt@deflength{\tptframetitlefriezewidth}{19.5mm}
\tpt@deflength{\tptframetitlefriezeheight}{5mm}
\tpt@deflength{\tptframetitleyshift}{0pt}
\tpt@deflength{\tptframetitleyshiftifsubtitle}{8pt}% FIXME
\tpt@deflength{\tptframetitledepth}{2.1mm}% FIXME
\newlength{\tpt@frametitle@width}
\newlength{\tpt@frametitle@content@width}
\defbeamertemplate*{frametitle}{tpt default}[1][left]
{
\ifbeamercolorempty[bg]{frametitle}{}{\nointerlineskip}%
\setlength{\@tempdima}{%
\dimexpr \paperwidth - \tptframetitlefriezewidth - \tptframetitlesep
\relax}%
\begin{beamercolorbox}[sep=0cm,#1,wd=\paperwidth]{frametitle}
\usebeamerfont{frametitle}%
\if@tempswa\else\csname beamer@fte#1\endcsname\fi%
\begin{minipage}[b]{\tptframetitlefriezewidth}
\iftpt@infolines\vspace*{.15cm}\else\vspace*{.5cm}\fi
\mbox{%
\tptfrieze{%
0.333\tptframetitlefriezewidth}{\tptframetitlefriezeheight}{%
page in head/foot.bg,institute in head/foot.bg,title in head/foot.bg}
}\par%
\end{minipage}%
\hspace*{\tptframetitlesep}%
\begin{minipage}[c]{\@tempdima}
\ifx\insertframesubtitle\@empty%
\strut\insertframetitle\strut\par%
\else%
\strut\insertframetitle\strut\par%
\usebeamerfont{framesubtitle}\usebeamercolor[fg]{framesubtitle}\insertframesubtitle\strut\par
\fi
\end{minipage}
\vskip-1ex%
\if@tempswa\else\vskip-.3cm\fi% set inside beamercolorbox... evil here...
%
% Titre du frame : beamercolorbox standard incluant la frise,
% et un template interne qui gère les options d'alignement
% de l'ensemble titre + sous-titre.
%
% Largeurs calculées au vol.
\defbeamertemplate*{frametitle}{tpt default}[1][]{%
\tptthemekeys{#1}% Active les options données (comme pour le package).
\nointerlineskip% On ne saute pas de ligne après l'en-tête.
%
% La beamercolorbox prend tout le frame (moins les éventuelles sidebars).
\setlength{\tpt@frametitle@width}{%
\dimexpr \textwidth + \beamer@leftmargin + \beamer@rightmargin \relax}%
\begin{beamercolorbox}[sep=0pt,wd=\the\tpt@frametitle@width]{frametitle}
%
% La frise, avec une \rule invisible pour la marge verticale,
% et un arrière-plan blanc s'il y a une couleur de fond.
% FIXME mieux gérer couleur et marge p.ex. avec une autre beamercolorbox.
\mbox{%
\rule{0pt}{%
\dimexpr \tptframetitlefriezeheight + \tptframetitlefriezesep \relax}%
\ifbeamercolorempty[bg]{frametitle}{}{%
\rlap{\textcolor{white}{%
\rule[-1pt]{%
\dimexpr \tptframetitlefriezewidth + 1pt}{%
\dimexpr \tptframetitlefriezeheight + 2pt}%
}}}%
\tptfrieze{%
0.333\tptframetitlefriezewidth}{\tptframetitlefriezeheight}{%
page in head/foot.bg,institute in head/foot.bg,title in head/foot.bg}%
}%
\hspace*{\tptframetitlesep}%
%
% On ajoute une profondeur minimale s'il y a une couleur de fond.
\ifbeamercolorempty[bg]{frametitle}{}{%
\rule[-\tptframetitledepth]{0pt}{0pt}%
}%
%
% On décale la baseline de la hauteur demandée,
% notamment s'il y a un sous-titre.
\setlength{\@tempdima}{\tptframetitleyshift}%
\ifx\insertframesubtitle\@empty
\else
\addtolength{\@tempdima}{\tptframetitleyshiftifsubtitle}%
\fi
%
% Le template interne, à qui on précalcule sa largeur.
\setlength{\tpt@frametitle@content@width}{%
\dimexpr \tpt@frametitle@width
- \tptframetitlefriezewidth - \tptframetitlesep
- \beamer@rightmargin \relax}%
\raisebox{\@tempdima}{\usebeamertemplate{frametitle content box}}%
\end{beamercolorbox}%
}
%
% Pour le contenu du titre du frame, définissons des macros auxiliaires.
%
% Crée une \vbox alignée sur le dessous de son contenu
% et non sur la baseline de celui-ci.
\newcommand\tpt@bottomalignedbox[1]{%
\vbox{#1\nointerlineskip\vbox{}}%
}
% \tpt@framecontentbox{vbox}{align1}{pos1}{titre}{align2}{pos2}{sous-titre}
% génère la boîte contenant titre et sous-titre du frame, en l'alignant
% selon les paramètres :
% * "vbox" : \vbox (aligne le sous-titre) ou \vtop (aligne titre) ;
% * "align[12]" : vides (pour baseline) ou \tpt@bottomalignbox (pour dessous) ;
% * "pos[12]" sont passés aux \parbox qui contiennent titre/sous-titre.
%
\newcommand\tpt@framecontentbox[7]{%
#1{%
#2{\hbox{\parbox[#3]{\tpt@frametitle@content@width}{%
\usebeamerfont{frametitle}%
\raggedright\noindent
#4\par
}}}%
\nointerlineskip
\ifx\insertframesubtitle\@empty%
\else
#5{\hbox{\parbox[#6]{\tpt@frametitle@content@width}{%
\usebeamerfont{framesubtitle}%
\usebeamercolor[fg]{framesubtitle}%
\raggedright
#7\par
}}}%
\fi
}
}
% Maintenant les variantes du template contenu, selon l'alignement désiré.
\defbeamertemplate*{frametitle content box}{baseline}{%
\tpt@framecontentbox{\vtop}%
{}{t}{\strut\insertframetitle\strut}%
{}{}{\insertframesubtitle\strut}%
}
\defbeamertemplate{frametitle content box}{bottom baseline}{%
\tpt@framecontentbox{\vtop}%
{}{b}{\strut\insertframetitle\strut}%
{}{}{\insertframesubtitle\strut}%
}
\defbeamertemplate{frametitle content box}{bottom}{%
\tpt@framecontentbox{\vtop}%
{\tpt@bottomalignedbox}{b}{\insertframetitle}%
{}{}{\insertframesubtitle\strut}%
}
\defbeamertemplate{frametitle content box}{subtitle bottom baseline}{%
\tpt@framecontentbox{\vbox}%
{}{}{\strut\insertframetitle\strut}%
{}{b}{\insertframesubtitle\strut}%
}
\defbeamertemplate{frametitle content box}{subtitle bottom}{%
\tpt@framecontentbox{\vbox}%
{}{}{\strut\insertframetitle\strut}%
{\tpt@bottomalignedbox}{b}{\insertframesubtitle}%
}
% Aliases des options sans les espaces (parce que LaTeX les supprime).
\newcommand*\tpt@frametitle@defalias[2]{%
\defbeamertemplatealias{frametitle content box}{#1}{#2}%
}
\tpt@frametitle@defalias{bottombaseline}{bottom baseline}
\tpt@frametitle@defalias{subtitlebottombaseline}{subtitle bottom baseline}
\tpt@frametitle@defalias{subtitlebottom}{subtitle bottom}
%
% L'en-tête.
%
\defbeamertemplate*{headline}{tpt default}
{
\iftpt@infolines
......@@ -424,7 +556,7 @@
\defbeamertemplate*{itemize subsubitem}{tpt}{--}
%
% \bodyframecount: nº du dernier frame hors annexe.
% \bodyframecount : nº du dernier frame hors annexe.
%
\newcommand\insertbodyframenumber{1} % On démarre au frame 1.
\newif\ifinappendix\inappendixfalse % Flag positionné par \appendix...
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment