Vous êtes ici : Accueil  »   Modifier un thème Beamer  »   Affichage des sections

Beamer : modifier un thème

29/11/2008

La barre de navigation

[haut]1 - Liste horizontale des sections

\insertsectionnavigationhorizontal{width}{left insert}{right insert}
\insertsubsectionnavigationhorizontal{width}{left insert}{right insert}

Cette commande permet d'afficher la liste des sections sur une seule ligne de largeur {width}. On peut en outre ajouter des éléments à gauche {left insert} et/ou à droite {right insert}.

Voici à quoi peut ressembler l'affichage de la liste des sections, ici avec un logo à gauche :

screenshot

\defbeamertemplate*{headline}{}
{%
  \begin{beamercolorbox}{section in head/foot}
    \insertsectionnavigationhorizontal{\paperwidth}{\includegraphics[height=0.4cm]{vkos_small}}{}
  \end{beamercolorbox}%
 }

Elle est utilisée par les thèmes split et shadow (avec l'option compress) en plaçant côte à côte la liste des sections et celle des sous-sections.

Jouer sur les couleurs

Toute cette partie étant dans une beamercolorbox, on peut modifier la couleur de fond et la couleur du texte :

\setbeamercolor{section in head/foot}{bg=yellow!25}
\setbeamercolor{section in head/foot}{fg=red}

On peut modifier la police utilisée :

\setbeamerfont{section in head/foot}{size=\tiny, shape=\scshape}

après modification

Le nom des autres sections

le nom des autres sections est peu touchable directement et ne possède pas de couleur ou police propre, on ne peut jouer que sur un pourcentage de mélange (valeur par défaut : 50) entre la couleur de premier plan et celle du fond, plus la valeur donnée est faible, plus la couleur devient "légére" :

\setbeamertemplate{section in head/foot shaded}[default][75]
\setbeamertemplate{section in head/foot shaded}[default][25]

Cependant, il est possible d'obtenir une couleur différente entre la section en cours et les autres en modifiant l'en-tête (headline) global. Ici, le rouge obtenu semble bien être mélangé à autre chose (sûrement un pourcentage du bleu de structure ?) mais on obtient bien 2 couleurs différentes pour les noms de sections :

\setbeamercolor{headline}{bg=red}

screenshot

[haut]2 - Le nom de la section en cours

\insertsectionhead
\insertsubsectionhead

affichent le nom court de la section et de la sous-section en cours.

\insertsection
\insertsubsection

affichent le nom complet de la section et de la sous-section en cours.

\defbeamertemplate*{headline}{infolines theme}
{
  \leavevmode%
  \hbox{%
  \begin{beamercolorbox}[wd=.5\paperwidth]{section in head/foot}%
    \insertsectionhead
  \end{beamercolorbox}%
  \begin{beamercolorbox}[wd=.5\paperwidth]{subsection in head/foot}%
    \insertsubsectionhead
  \end{beamercolorbox}}%
  \vskip0pt%
}

Ceci nécessite une autre commande dans la définition du template . \leavevmode pour quitter le mode vertical et placer les deux beamercolorbox côte à côte dans une hbox. Utilisé par le thème infolines.

[haut]3 - Liste horizontale des sections + liste des sous-sections et frames

\insertnavigation{width}

Cette commande affiche les noms des sections et des symboles représentant le nombre de sous-sections (en vertical) et de frames (horizontal)

Elle est utilisée dans les thème externes miniframes et smoothbars :

\defbeamertemplate*{headline}{miniframes theme}
{%
  \begin{beamercolorbox}{section in head/foot}
    \insertnavigation{\paperwidth}
  \end{beamercolorbox}%
 }

Les icônes de sous-section

On peut facilement changer leur forme avec :

\setbeamertemplate{mini frames}[OPTION]

où OPTION peut être [default] pour de petits cercles (ou ne pas utiliser cette commande), [box] pour de petits rectangles et [tick] pour des barres verticales (trés discrètes mais trés difficiles à viser). On retrouve la définition de ces motifs dans beamer/basebeamerbaseauxtemplates.sty, le rectangle est dessiné avec pgf, il doit donc être possible de fabriquer d'autres motifs...

Il est aussi possible de changer la couleur de ces motifs : \setbeamercolor{mini frame}{fg=red}

\setbeamertemplate{mini frames}[box]

grossi

\setbeamertemplate{mini frames}[tick]

grossi

[haut]4 - Liste verticale des sections

\insertsectionnavigation
\insertsubsectionnavigation

Ces commandes affichent la liste verticale des noms de sections et sous-sections, celles en cours étant mises en évidence. Ce template est utilisé dans les thèmes split et shadow

grossi

Voici à quoi il ressemble (simplifié, la variable \@tempdimb contient la hauteur calculée pour le nombre de lignes à afficher) :

\defbeamertemplate*{headline}{split theme}
{%
  \leavevmode%
  ...
  \begin{beamercolorbox}[wd=.5\paperwidth,ht=\@tempdimb]{section in head/foot}%
     \vbox to\@tempdimb{\vfil\insertsectionnavigation{.5\paperwidth}\vfil}%
  \end{beamercolorbox}%
  \begin{beamercolorbox}[wd=.5\paperwidth,ht=\@tempdimb]{subsection in head/foot}%
      \vbox to\@tempdimb{\vfil\insertsubsectionnavigation{.5\paperwidth}\vfil}%
  \end{beamercolorbox}%
}

Pour gérer l'alignement à droite des sections (avec un \hfill), le thème redéfinit aussi leur présentation. La première partie concerne la section en cours, la deuxième partie concerne les autres sections.

\usesectionheadtemplate
  {\hfill\insertsectionhead}
  {\hfill\color{fg!50!bg}\insertsectionhead}

[haut]5 - Quelques essais

Comment obtenir dans l'en-tête, une liste des sections avec le nom de la section en cours en "inverse vidéo" comme dans les menus en html ? Comment obtenir le nom des sous-sections à la place d'un symbole, et sur une seule ligne pour préserver un maximum de place pour les textes et afficher le nombre de frames en fin de ligne ?

screenshot

couleurs

\definecolor{inversevideodessous}{rgb}{0.55,0.2,0.2}
\definecolor{inversevideodessus}{rgb}{1,1,1}

affichage des sections

\usesectionheadtemplate
  {\colorbox{inversevideodessous}{\color{inversevideodessus} \insertsectionhead}}
  {\color{inversevideodessous} \insertsectionhead}

en-tête

\defbeamertemplate*{headline}{}
{%
...
  \begin{beamercolorbox}[ht=1.875ex,dp=0.75ex]{section in head/foot}%
    \insertsectionnavigationhorizontal{\paperwidth}{}{}%
  \end{beamercolorbox}%
...
  \begin{beamercolorbox}[ht=1.875ex,dp=0.75ex]{subsection in head/foot}
    \usebeamerfont{subsection in head/foot}
    \insertsubsectionnavigationhorizontal{\paperwidth}{}{\hskip0pt plus1filll%
    \insertframenumber/\inserttotalframenumber\hskip2ex}%
  \end{beamercolorbox}%
}

Il reste un léger liseré blanc visible au-dessus du nom de certaines sections, le rapport entre les ex et les pixels n'est pas évident.

Comment faire rentrer le titre du frame dans l'en-tête ?

screenshot

\useframetitletemplate{}

pour éliminer l'affichage normal du titre du frame.

\defbeamertemplate*{headline}{}
{%
\leavevmode%
 \begin{beamercolorbox}[wd=.25\paperwidth,ht=\@tempdimb]{section in head/foot}%
    \vbox to\@tempdimb{\vfil\insertsectionnavigation{.25\paperwidth}\vfil}%
 \end{beamercolorbox}%
 \begin{beamercolorbox}[wd=.75\paperwidth,ht=\@tempdimb]{subsection in head/foot}%
   \vbox to\@tempdimb{\vfil\hfil \Large{\insertsubsection} \hfil\vfil}%
 \end{beamercolorbox}%
}

En réalité, ça ne marche pas, le titre du frame n'est pas disponible au moment de la construction de l'en-tête. Si je le remplace par le nom de la sous-section (ce qui suppose de créer une sous-section pour chaque frame), ça peut faire illusion.


page trouvée sur http://mcclinews.free.fr

Novembre 2008 - mcclinews