Classes standard

Les classes standard de LaTeX — article, report, book, letter, plus la vénérable slides — ne sont pas cinq programmes écrits séparément. Les trois premières sont trois sorties d'un même fichier source, classes.dtx, produites avec des options différentes. Dans TeX Live 2024, report.cls et book.cls font chacune un peu moins de 750 lignes, et un diff entre les deux n'en touche que 67. Soixante-sept lignes : voilà toute la distance entre un rapport et un livre. Cette page les lit. Quelle classe possède des chapitres, laquelle compose en recto seul ou recto verso, ce que \frontmatter commute réellement, et où les options par défaut divergent — chaque affirmation vérifiée sur une sortie réelle plutôt que récitée de mémoire.

article, report et book sortent d'un seul fichier source

Les trois classes sont tirées d'un même plan. En tête de article.cls on lit « classes.dtx (with options: article) » ; report.cls et book.cls portent la même ligne avec un autre nom d'option. Pour connaître leurs différences, lancer diff va donc plus vite que lire un manuel. L'écart entre article.cls et report.cls est de 232 lignes ; entre report.cls et book.cls, de 67. Ces deux nombres sont les distances elles-mêmes : passer de article à report ajoute un niveau de hiérarchie entier, alors que passer de report à book est un ajustement bien plus modeste. Les sections qui suivent ne traitent que de ce qui figure réellement dans ces diffs.

shell
# the header that gives the game away, and the two distances
head -8 "$(kpsewhich book.cls)" | grep classes.dtx
#   %% classes.dtx  (with options: `book')

diff "$(kpsewhich article.cls)" "$(kpsewhich report.cls)" | grep -c '^[<>]'   # 232
diff "$(kpsewhich report.cls)"  "$(kpsewhich book.cls)"   | grep -c '^[<>]'   # 67

Quelles classes ont \chapter, et ce que la réponse change encore

Seules report et book possèdent \chapter ; article ne l'a pas. Écrivez \chapter{...} dans un article et l'erreur ne dit pas « cette classe n'a pas de chapitres » : elle dit ! Undefined control sequence., car pour LaTeX une commande absente et une faute de frappe sont le même événement. Plus lourd de conséquences : cette seule différence modifie la numérotation à quatre endroits à la fois. report.cls et book.cls déclarent \newcounter{section}[chapter], si bien que les numéros de section sont remis à zéro à chaque chapitre et prennent la forme 2.1. Figures, tableaux, équations et notes de bas de page se réinitialisent également par chapitre (\@addtoreset{equation}{chapter} et compagnie). Et la valeur par défaut de secnumdepth est 3 dans article, mais 2 dans report et book.

Composez le même corps dans les deux classes et la différence de secnumdepth saute aux yeux. Donnez à chacune un \section, un \subsection et un \subsubsection : article imprime « 1 / 1.1 / 1.1.1 » et numérote les trois niveaux, tandis que report imprime « 0.1 / 0.1.1 / (sans numéro) ». Dans report et book, \subsubsection n'est pas numéroté par défaut — c'est presque toujours la cause de « mes sous-sous-sections n'ont pas de numéro », et \setcounter{secnumdepth}{3} dans le préambule y remédie. Le « 0.1 » mérite aussi l'attention : si un report ou un book commence par \section sans \chapter avant, le compteur de chapitre reste à zéro et les sections sortent en 0.1, 0.2. Si le document n'a pas de chapitres, c'est la classe qui signale qu'il aurait fallu un article.

latex
% same body, two classes: article numbers three levels, report only two
\documentclass{article}   % -> 1 Sec / 1.1 Sub / 1.1.1 Subsub
%\documentclass{report}   % -> 0.1 Sec / 0.1.1 Sub / Subsub (unnumbered)
\begin{document}
\section{Sec}\subsection{Sub}\subsubsection{Subsub}
\end{document}

% in report/book, restore the third level with:
%   \setcounter{secnumdepth}{3}

Profitons-en pour démentir une croyance répandue : \part ne remet pas le compteur de chapitre à zéro. report.cls comme book.cls n'écrivent que \newcounter{chapter}, sans argument optionnel le liant à part. Placez deux chapitres dans la partie I puis ouvrez la partie II : le chapitre suivant porte le numéro 3, pas 1 — et ce dans les deux classes. Pour que la numérotation reparte à chaque partie, il faut le déclarer soi-même, par exemple avec \counterwithin{chapter}{part} dans le préambule. L'apparence de \part, elle, varie bel et bien : dans article c'est un titre dans le fil du texte, tandis que dans report et book il provoque un saut de page et occupe une page entière, centré et en grand corps.

report contre book : la même source, 5 pages ou 9

La bifurcation entre les deux classes tient à une seule ligne de valeurs par défaut. report.cls écrit \ExecuteOptions{letterpaper,10pt,oneside,onecolumn,final,openany} ; book.cls écrit ...,twoside,onecolumn,final,openright}. Tout le reste en découle. openright fait commencer les chapitres sur une page de droite (impaire), en insérant au besoin un verso blanc. Composez la même source — deux parties, trois chapitres — dans chacune : report donne 5 pages, book en donne 9. Plusieurs des quatre pages supplémentaires sont entièrement vides. C'est le comportement correct pour un ouvrage imprimé et relié, et une simple gêne pour un PDF lu à l'écran. D'où la combinaison réellement employée en pratique : choisir book, puis écrire oneside explicitement.

Le diff recèle un élément plus surprenant encore. book n'a pas d'environnement abstract. article et report en définissent un ; book.cls omet tout le bloc et ne définit jamais \abstractname. Faites passer à book un manuscrit qui compilait en report et il s'arrête sur ! LaTeX Error: Environment abstract undefined. — un choix éditorial (un livre ne porte pas de résumé) figé dans le fichier de classe. Le style de page par défaut diffère aussi : report emploie plain (un numéro de page centré en pied) et book emploie headings (titres courants portant chapitre et section). Enfin, book charge son propre fichier de mise en page, bk10.clo. Comparé au size10.clo d'article et report, le bloc de texte se resserre de 345pt à 4.5in (environ 325pt), sa hauteur passe de 43 à 41 lignes, et les marges deviennent asymétriques : 0.5in côté couture, 1.5in côté gouttière. Passer de report à book change non seulement l'imposition mais la boîte même où le texte se pose.

Classe\chapterValeurs par défautStyle de page par défautFichier de mise en page
articleAucun ; niveau supérieur \sectiononeside, notitlepage, secnumdepth=3plainsize10.clo
reportOuioneside, openany, titlepage, secnumdepth=2plainsize10.clo
bookOui ; sans numéro dans \frontmattertwoside, openright, titlepage, secnumdepth=2headingsbk10.clo (autre mise en page)
letterAucun ; l'unité est l'environnement letteroneside, letterpaper, 10ptfirstpage / plainsize10.clo
slidesAucun ; l'unité est l'environnement slideletterpaper, finalLe siensfonts.def / slides.def

Ce que \frontmatter, \mainmatter et \backmatter commutent vraiment

Ces trois commandes appartiennent à book seul, et chacune fait deux choses à la fois. \frontmatter passe la pagination en chiffres romains (i, ii, …) et met simultanément \if@mainmatter à faux, ce qui cesse de numéroter les chapitres. \mainmatter revient aux chiffres arabes en repartant de 1 et rétablit les numéros de chapitre. \backmatter laisse la pagination intacte et se contente de désactiver à nouveau les numéros de chapitre. C'est ce second effet qui rapporte : les chapitres non numérotés des pages liminaires figurent quand même dans la table des matières, si bien que le contournement habituel — \chapter* suivi d'un \addcontentsline écrit à la main — est inutile dans book. Après compilation, le fichier .toc affiche \contentsline {chapter}{Preface}{i} sans numéro, à côté des entrées du corps munies de \numberline {1}.

latex
\documentclass[11pt,a4paper]{book}
\begin{document}
\frontmatter                 % roman page numbers, chapters unnumbered
\chapter{Preface}            % -> toc: \contentsline {chapter}{Preface}{i}
\tableofcontents

\mainmatter                  % arabic, restarts at 1, chapters numbered again
\chapter{Beginning}          % -> toc: ... {\numberline {1}Beginning}{1}
\section{Apparatus}          % numbered 1.1

\backmatter                  % page numbers continue, chapters unnumbered
\chapter{Index}
\end{document}

Les options de \documentclass, et les défauts qui changent selon la classe

Toutes les classes standard sauf slides acceptent un jeu d'options commun entre les crochets de \documentclass[...]{...}. La plupart sont des interrupteurs valables pour tout le document, mais le point décisif est que le même nom d'option a des valeurs par défaut différentes selon la classe. C'est ce que consigne la colonne « Valeurs par défaut » du tableau ci-dessus ; chaque valeur est écrite telle quelle sur la ligne \ExecuteOptions{...} du fichier de classe.

  • 10pt / 11pt / 12pt — taille de base du corps. Les trois classes ont 10pt par défaut.
  • Format du papierletterpaper (défaut), a4paper, a5paper, b5paper, legalpaper, executivepaper. Le défaut étant le Letter américain, on écrit a4paper à chaque fois dans les pays A4.
  • twoside / oneside — mise en page recto verso ou recto seul. Seul book a twoside par défaut.
  • openright / openany — si les chapitres s'ouvrent sur une page de droite ou sur n'importe quelle page. book emploie openright, report openany. article ne déclare ni l'un ni l'autre : l'écrire n'est pas une erreur, l'option se contente de sombrer dans le journal sous la forme LaTeX Warning: Unused global option(s): (la raison de cette asymétrie est traitée dans « Class options & authoring »).
  • titlepage / notitlepage — si le titre a sa propre page. report et book emploient titlepage, article notitlepage.
  • twocolumn / onecolumn — composer le corps sur deux colonnes ou une. Les trois ont onecolumn par défaut.
  • fleqn — aligner à gauche les formules hors texte (centrées par défaut). leqno — placer les numéros d'équation à gauche (à droite par défaut). Les deux sont mis en œuvre par le chargement d'un fichier .clo.
  • landscape — orientation paysage. draft — marquer les overfull boxes d'un filet noir (le défaut est final). openbib — composer la bibliographie dans un format « ouvert ».

La classe letter : un jeu de commandes entièrement différent

letter n'a aucun lien de parenté avec les trois autres. Elle provient de sa propre source et non de classes.dtx, et remplace \section, \maketitle et la page de titre par un vocabulaire épistolaire. Les informations d'expéditeur — \address{...} (votre adresse), \signature{...}, \name{...}, \location{...}, \telephone{...} — se placent dans le préambule et servent à toutes les lettres du fichier. Une lettre est un environnement letter dont l'argument est l'adresse du destinataire. Le corps s'ouvre par \opening{...} et se ferme par \closing{...}, éventuellement suivi de \cc{...} pour les copies, \encl{...} pour les pièces jointes et \ps pour un post-scriptum. Les retours à la ligne dans une adresse s'écrivent \\.

latex
\documentclass{letter}
\address{1 Computing Way \\ London}   % sender, shared by every letter
\signature{Ada Lovelace}
\makelabels                          % appends a sheet of mailing labels

\begin{document}
\begin{letter}{Charles Babbage \\ 2 Engine Road}  % recipient = argument
\opening{Dear Mr.\ Babbage,}
Thank you for the notes on the Analytical Engine.
\closing{Yours sincerely,}
\cc{The Royal Society}
\encl{Two diagrams}
\end{letter}

\begin{letter}{Mary Somerville \\ 3 Science Lane}
\opening{Dear Mrs.\ Somerville,}
A second letter, same sender, same file.
\closing{Yours sincerely,}
\end{letter}
\end{document}

Une seule ligne dit pour quelle époque cette classe a été conçue. Placez \makelabels dans le préambule et le PDF gagne une dernière page d'étiquettes d'adresse. Compilez l'exemple ci-dessus : deux pages de lettres, puis une planche d'étiquettes portant les deux adresses de destinataires, soit trois pages en tout. On l'imprimait sur planche autocollante, on détachait, on collait sur les enveloppes. C'était le quotidien. À l'inverse, letter excelle vraiment dans le publipostage d'un expéditeur vers de nombreux destinataires : il suffit d'aligner autant d'environnements letter que d'adresses. Dès que les exigences de forme deviennent précises — la norme DIN 5008 dans l'espace germanophone, par exemple — passez à une classe dédiée comme scrlttr2 de KOMA-Script.

Ce qu'était la classe slides : les présentations avant beamer

La cinquième classe standard, slides, figure toujours dans TeX Live (v2.4b dans l'édition 2024, révisée en 2022). Ce n'est pourtant pas un vieux beamer. Le fichier manifest.txt livré avec LaTeX décrit slides.dtx comme « Slides class, etc based on SLiTeX », et c'est exactement cela : la descendante de SLiTeX, le programme jadis autonome qui fabriquait des transparents pour rétroprojecteur avec TeX. D'où un vocabulaire différent. Un environnement slide est une feuille, un environnement note la note de l'orateur, et un environnement overlay était littéralement un second transparent posé sur le premier. À la compilation, la numérotation le confirme : la diapositive est « 1 », l'overlay posé dessus « 1-a » et la note correspondante « 1-1 ». \onlyslides{...} et \onlynotes{...} permettent de n'imprimer que les diapositives ou que les notes à partir d'une seule source.

Le verdict pratique est simple : pour de nouvelles diapositives, utilisez beamer et non slides. L'ancienne classe n'a ni thèmes, ni overlays progressifs au sens actuel, ni navigation PDF ; sa sortie a été pensée pour l'impression, pas pour un projecteur. slides ne mérite d'être lue que si vous héritez d'un vieux manuscrit, ou si vous voulez voir d'où vient la conception beamer d'un frame comme « un écran logique ».

Comment choisir : partir de l'exigence

Le choix d'une classe n'est pas affaire de goût : il se déduit de ce qu'il faut rendre. Pas besoin de chapitres, article ; un rapport technique chapitré, report ; un manuscrit relié qui doit fonctionner en double page, book ; de la correspondance, letter. Si un modèle est fourni, sa classe a déjà fixé la structure, les marges et le traitement du titre : ne le ramenez pas à une classe standard.

  • PDF lu uniquement à l'écran — écrivez oneside explicitement. Même avec book, \documentclass[oneside]{book} supprime les pages blanches.
  • Imprimé et relié — choisissez twoside et openright en connaissance de cause, et vérifiez la marge intérieure pour la reliure.
  • Vous voulez vraiment maîtriser la page — les classes standard offrent peu de prises ; passez à KOMA-Script (scrartcl / scrreprt / scrbook) ou à memoir.
  • Texte principalement japonais — les classes standard n'ont pas été conçues pour la composition japonaise. Partez de jsclasses (jsarticle / jsbook) sous pLaTeX / upLaTeX, de ltjsclasses sous LuaLaTeX, ou de jlreq, plus récente.
  • Diapositives — beamer, pas slides.

Que vérifier après avoir changé de classe en cours de route

Réécrire un mot dans \documentclass n'est pas un changement cosmétique mais structurel. Comme on l'a vu, cela déplace d'un coup la disponibilité des chapitres, la profondeur de numérotation, l'existence d'abstract, les dimensions du bloc de texte et l'insertion de pages blanches. Après le changement, une compilation propre ne prouve rien : vérifiez ces cinq points à l'œil.

À vérifierCe qui se passeCorrection
\chapterPasser à article s'arrête sur ! Undefined control sequence.Rétrograder les chapitres en \section, ou rester sur report / book
abstractPasser à book donne ! LaTeX Error: Environment abstract undefined.Supprimer le résumé, ou le remplacer par \chapter*{Abstract}
secnumdepthEn venant d'article, les numéros de \subsubsection disparaissentAjouter \setcounter{secnumdepth}{3}
openrightAvec book, des versos blancs précèdent les chapitres et la pagination gonfleoneside pour l'écran ; laisser tel quel pour l'impression
titlepage\maketitle gagne ou perd une page dédiéeDéfinir explicitement titlepage ou notitlepage