\usetheme{Madrid}, \usetheme{Warsaw}, \usetheme{Singapore} — beamer, la classe LaTeX pour les diapositives de présentation, embarque 27 thèmes de présentation actuels, et chacun sans exception porte un nom de ville. L'auteur s'en explique dans le manuel : il était à court d'idées de noms, et les villes sont celles où lui ou un coauteur a participé à une conférence ou à un atelier. Cette désinvolture caractérise la classe entière. Écrire du beamer ressemble presque en tout point à écrire n'importe quel document LaTeX, à une différence près qui change tout : l'unité est le frame, pas la page. Cette page part de ce seul fait et déroule le reste — frames, overlays, thèmes, et pourquoi un environnement verbatim casse une diapositive dès qu'on en ajoute un.
En quoi beamer diffère d'une classe de document ordinaire
Dès que \documentclass{beamer} est écrit, les outils qui poussent les pages cessent d'agir. Placez \newpage à l'intérieur d'un frame : ni erreur, ni avertissement, il est purement ignoré ; à l'essai, les deux paragraphes situés de part et d'autre sortent côte à côte sur une même diapositive. La raison est directe : dans beamer, ce sont les limites du frame qui décident des sauts de page, pas l'auteur. Pour la même raison, \section{...} n'imprime rien dans le corps — il ne fait que s'inscrire dans la table des matières et la navigation. Et le texte écrit hors de tout \begin{frame} n'est pas non plus une erreur : il est composé sur une page nue, sans thème. C'est presque toujours l'origine du « il y a une page bizarre au milieu de ma présentation ».
L'autre écart avec un document papier tient aux dimensions : beamer compose un écran, pas une feuille. Le défaut est le 4:3, écrit dans beamer.cls sous la forme \beamer@paperwidth{12.80cm} et \beamer@paperheight{9.60cm}, soit 128 mm × 96 mm. Une option de classe change le rapport : \documentclass[aspectratio=169]{beamer} donne du 16:9 en 160 mm × 90 mm. La version livrée avec TeX Live 2024 possède huit valeurs explicites : 1610, 169, 149, 54, 43, 32, 141 et 2013. L'intéressant est ce qu'elle fait du reste : donnez-lui un nombre absent de la liste et beamer fixe la hauteur à 9,60 cm puis calcule le rapport en découpant les chiffres. Écrivez aspectratio=21 et vous obtenez une vraie diapositive 2:1, large de 19,2 cm. La taille du corps se règle comme d'habitude, par exemple \documentclass[11pt]{beamer} ; le défaut est 11pt.
L'environnement frame : une diapositive n'est pas une page
Le cœur de beamer est l'environnement frame. Tout ce qui va de \begin{frame} à \end{frame} forme un écran logique, où l'on place puces, figures et équations. On lui donne un titre avec \frametitle{...} ou en argument : \begin{frame}{Title}. Le point capital est qu'un frame n'est pas nécessairement une page. Avec les overlays de la section suivante, un seul frame produit plusieurs pages PDF qui se lisent comme une révélation progressive. Le frame est l'écran logique, la page PDF en est une image fixe — la documentation de beamer distingue d'ailleurs les deux mots : frame pour le premier, slide pour le second.
frame accepte des options entre crochets. Celle qu'on emploie le plus est [allowframebreaks], quand le contenu déborde en hauteur. beamer répartit alors le frame sur autant de pages que nécessaire et — joli détail — ajoute un chiffre romain au titre du frame : versez-y une liste de vingt-deux éléments et la première page s'intitule « Long I », la seconde « Long II ». À connaître aussi : [t], [c] et [b] pour caler le contenu en haut, au centre ou en bas ; [plain], qui retire le décor du thème pour qu'une figure remplisse l'écran ; [label=...], pour rappeler le frame plus tard avec \againframe ; et [noframenumbering], pour qu'un frame ne soit pas compté. Le [fragile] de la section suivante se met au même endroit.
Les métadonnées de titre se déclarent dans le préambule, exactement comme avec article. Écrivez \title{...}, \author{...}, \institute{...} et \date{...}, puis placez \titlepage dans un frame du corps pour composer la diapositive de titre (\maketitle donne le même résultat). Pour un exposé plus long, découper la matière avec \section{...} alimente la navigation en haut de chaque diapositive. Une fois les sections déclarées, \tableofcontents dans un frame produit une diapositive de sommaire, et \tableofcontents[currentsection] ne met en valeur que la section en cours. Pour insérer un tel frame automatiquement en tête de chaque section, on le câble avec \AtBeginSection[]{...} dans le préambule.
Overlays : la différence entre \pause et <2->
Dévoiler le contenu par morceaux, c'est le rôle des overlays, et il y a deux portes d'entrée. \pause se pose simplement au milieu d'un frame et repousse tout ce qui suit sur la diapositive suivante — commode, mais il ne sait construire que pas à pas, dans l'ordre du source. L'autre est la spécification d'overlay, les chevrons <...> accolés juste après une commande. \item<1-> signifie « à partir de la diapositive 1 », \item<2> « sur la diapositive 2 seulement », \item<2-> « à partir de la diapositive 2 ». On peut énumérer plages et trous ensemble, comme <-2,4-5,7>. À la compilation, le comportement colle exactement à l'écriture : l'élément marqué \item<3> apparaît sur la troisième image, \only<2>{...} ne se montre que sur la deuxième, et \uncover<3->{...} devient visible à partir de la troisième.
| Commande | Comportement | Espace pendant le masquage |
|---|---|---|
\pause | Repousse la suite à la diapositive suivante | Le contenu s'ajoute tour à tour, la question ne se pose pas |
\uncover<2->{...} | Devient visible sur les images indiquées | Toujours réservé, la mise en page ne saute jamais |
\onslide<2->{...} | Affiché sur les images indiquées, caché sinon | Toujours réservé |
\only<2>{...} | N'émet de sortie que sur les images indiquées | Non réservé, la suite remonte |
\alert<2>{...} | Passe à la couleur alert sur les images indiquées | Toujours visible, donc toujours réservé |
[<+->] | Sur un environnement de liste, fait défiler chaque élément automatiquement | Se comporte comme \uncover |
C'est la troisième colonne qui rend ce tableau utile. \uncover et \onslide réservent l'espace même caché, de sorte que rien alentour ne bouge quand les éléments apparaissent. \only insère et retire la sortie elle-même : l'espace masqué est récupéré et tout ce qui suit se décale. Pour remplacer une partie d'une formule, c'est exactement ce qu'on veut ; pour dérouler une liste à puces, c'est un piège, et \uncover ou [<+->] est plus sûr. La même syntaxe d'overlay s'attache à \textbf et \textcolor autant qu'à \alert : « en gras sur cette image seulement » ne demande aucune grammaire nouvelle.
% the blunt instrument: everything after \pause moves to the next slide
\begin{frame}{Results}
\begin{itemize}
\item First point
\pause
\item Second point
\end{itemize}
\end{frame}
% overlay specifications: say exactly which slides each piece belongs to
\begin{frame}{Results}
\begin{itemize}
\item<1-> Always there
\item<2-> From slide two
\item<3> Slide three only
\end{itemize}
\only<2>{Shown on slide 2, and takes no space otherwise}
\uncover<3->{Space is reserved from the start, ink appears on slide 3}
\end{frame}
% the same stepwise reveal, without numbering each item by hand
\begin{frame}{Results}
\begin{itemize}[<+->]
\item Observation
\item Interpretation
\item Limitation
\end{itemize}
\end{frame}Thèmes : villes, animaux volants, fleurs et créatures marines
Il existe cinq sortes de thèmes, et le nom indique de quelle sorte il s'agit. Les noms de villes du début — Madrid, Warsaw, Berlin, Singapore et les autres — sont des thèmes de présentation, ceux qui règlent tout d'un coup. Les thèmes de couleur poussent l'idée plus loin, et le manuel vend lui-même la mèche. Les animaux volants (albatross, beetle, crane) sont les thèmes de couleur « complets », qui fixent eux-mêmes toutes les couleurs. Les fleurs (lily, orchid, rose) sont des thèmes de couleur internes, qui ne changent que la couleur des éléments intérieurs comme les blocs. Les animaux marins (whale, dolphin, seahorse) sont des thèmes de couleur externes, qui régissent la palette de l'en-tête, du pied et de la barre latérale. Dès qu'on écrit \usecolortheme{whale}, le nom a donc déjà annoncé qu'il ne touche qu'au pourtour.
| Commande | Ce qu'elle fixe | Exemple |
|---|---|---|
\usetheme | Mise en page, navigation et couleurs d'un coup | \usetheme{Madrid} (une ville) |
\usecolortheme | Ne remplace que la palette | \usecolortheme{seahorse} (animal marin = externe) |
\usefonttheme | Polices des titres et du corps | \usefonttheme{serif}, \usefonttheme{professionalfonts} |
\useinnertheme | Style des éléments internes (puces, forme des blocs) | \useinnertheme{rounded} |
\useoutertheme | Style du cadre (en-tête, pied, barre latérale) | \useoutertheme{infolines} |
En pratique, le chemin rapide consiste à choisir un \usetheme{...} puis à ne redéfinir que ce qui déplaît, à l'aide des quatre commandes suivantes. Choisissez selon l'usage : Madrid ou Boadilla quand une barre de navigation ne ferait qu'encombrer, Frankfurt ou Warsaw quand vous voulez que l'auditoire sache où il en est. Pour une allure plus contemporaine, metropolis (\usetheme{metropolis}) est la réponse habituelle — il ne fait pas partie de beamer lui-même, mais TeX Live le distribue comme package séparé. Un avertissement : faire défiler les thèmes est un moyen éprouvé de perdre un après-midi. Le public regarde le contenu, pas la palette ; tranchez tôt et retournez à la rédaction.
block et columns : encadrer le contenu et couper la diapositive
Pour détacher du contenu dans une boîte encadrée, on emploie l'environnement block : \begin{block}{Title}…\end{block} produit une boîte titrée dont la couleur suit le thème. Le tapageur alertblock et l'exampleblock s'écrivent pareillement, et les environnements theorem et definition sont disponibles tels quels (beamer charge amsthm pour vous). Pour couper une diapositive en deux, placez des entrées \column{width} dans l'environnement columns — le geste standard pour poser une figure à côté de son explication.
\begin{frame}{Comparison}
\begin{columns}
\column{0.5\textwidth}
\begin{block}{Before}
The old estimate.
\end{block}
\column{0.5\textwidth}
\begin{alertblock}{After}
The corrected one.
\end{alertblock}
\end{columns}
\end{frame}Pourquoi un environnement verbatim casse un frame, et ce que fait [fragile]
Placez un environnement verbatim ou un lstlisting du package listings dans un frame et la compilation s'arrête, sauf si vous avez écrit \begin{frame}[fragile]. L'ennui vient de la façon dont elle s'arrête. Testé sous TeX Live 2024, beamer ne désigne pas un numéro de ligne mais le fichier entier, et déclare : Runaway argument?, puis ! File ended while scanning use of \@xverbatim., puis I suspect you have forgotten a }, causing me to read past where you wanted me to stop. et enfin ! Emergency stop. Vous récupérez le nom d'une macro interne que vous n'avez jamais tapée, assortie d'un diagnostic péremptoire : vous auriez laissé une accolade ouverte. Aucune accolade n'est ouverte. Suivez ce conseil et vous compterez longtemps des accolades dans un fichier dont les accolades vont très bien.
La vraie cause n'est pas les accolades mais l'ordre de lecture. beamer lit d'abord tout le corps d'un frame comme un argument, puis le compose une fois par image d'overlay. Or verbatim fonctionne en changeant l'interprétation des caractères au moment de la lecture, ce qui arrive trop tard pour un corps déjà avalé. D'où l'ouverture de l'erreur sur Runaway argument? : l'accident se produit précisément pendant que le corps est lu comme argument. [fragile] fait emprunter à beamer une autre voie. Selon les termes du guide de l'utilisateur, le contenu du frame est écrit dans un fichier externe puis relu. À la compilation, on le voit : un fichier d'extension .vrb apparaît dans le répertoire de travail, contenant le corps du frame tel quel.
Ce détour par un fichier engendre une seconde règle. Comme l'indique explicitement le guide de l'utilisateur, dans un frame [fragile], \end{frame} doit être seul sur sa ligne (espaces initiaux mis à part). beamer cherche cette chaîne exacte en début de ligne pour savoir où arrêter l'écriture ; la replier en \end{verbatim} \end{frame} échoue de la même manière, en nommant cette fois une autre macro interne : ! File ended while scanning use of \next. Autre point : les commandes d'overlay comme \alert<2>{...} restent sans effet dans verbatim, puisque restituer les caractères tels quels est précisément son travail. Pour mettre en valeur une partie d'un listing, utilisez l'environnement semiverbatim fourni par beamer — presque identique à verbatim, sauf que \, { et } survivent comme commandes, ce qui permet d'y glisser un \alert<2>{...}.
\begin{frame}[fragile]{An algorithm} % [fragile] -> body goes via a .vrb file
\begin{verbatim}
int main(void) { return 0; }
\end{verbatim}
\end{frame} % must be alone on its own line
% to highlight part of a listing, use semiverbatim rather than verbatim
\begin{frame}[fragile]{Highlighted}
\begin{semiverbatim}
for (int i = 2; i < 100; i++)
\alert<2>{if (is_prime[i])}
\end{semiverbatim}
\end{frame}Le plus petit document beamer qui compile
Voici le minimum offrant un thème, une diapositive de titre et une liste à révélation progressive. Le préambule déclare le thème et les métadonnées de titre ; le corps place \titlepage dans le premier frame et une liste [<+->] dans le second. Il n'y a que deux frames, mais les overlays déploient le PDF sur quatre pages. Pour des diapositives en japonais, ajoutez au préambule la prise en charge adaptée au moteur — le chargement de luatexja sous LuaLaTeX, par exemple.
\documentclass[aspectratio=169,11pt]{beamer}
\usetheme{Madrid}
\usecolortheme{seahorse}
\title{My Talk}
\author{Ada Lovelace}
\institute{Analytical Engine Lab}
\date{\today}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
\begin{frame}{Overview}
\begin{itemize}[<+->]
\item Background
\item Method
\item Results
\end{itemize}
\end{frame}
\end{document}Un flux de travail pour un vrai exposé
beamer n'est pas un outil pour débiter un article en tranches. Découpez l'exposé en quelques mouvements — problème, méthode, résultats, conclusion — et ne mettez qu'une seule affirmation par frame. Plutôt que de coller de longs paragraphes du manuscrit, condensez-les en figures, équations et puces brèves, et n'ajoutez \pause ou <2-> que là où la révélation par étapes se justifie vraiment. Les overlays servent à régler l'ordre d'une explication, pas à décorer.
- Fixer d'abord le rapport d'aspect — si le projecteur est connu, verrouillez
aspectratio=169ou43avant toute conception. Le changer ensuite décale chaque figure déjà placée. - Densité par diapositive — trois à cinq puces. En cas de débordement, scinder le frame se lit généralement mieux que la fuite vers
[allowframebreaks]. - Code et journaux — donnez toujours
[fragile]aux frames contenantverbatim,lstlistingouminted, et gardez\end{frame}seul sur sa ligne. - Frames où une figure doit dominer —
[plain]retire le décor du thème pour que l'image occupe tout l'écran. - Le PDF que vous distribuez — le jeu de diapositives et le handout sont deux documents distincts. Replier les overlays avec le mode
handoutet rédiger des notes d'orateur sont traités sur la page Documents à distribuer.