L’en-tête en haut de la page et le numéro en bas répondent à la même question : où en suis-je dans le livre ? Le procédé est plus ancien que l’imprimerie — les copistes médiévaux réglaient une ligne supplémentaire dans la marge supérieure d’un manuscrit et y inscrivaient un titre courant, afin que le lecteur qui feuillette distingue les parties d’un codex. LaTeX reprend cette tâche et la confie à un mécanisme appelé style de page : quatre styles intégrés que l’on choisit avec \pagestyle et, lorsqu’ils ne suffisent plus, le paquet standard fancyhdr. Cette page suit le même chemin : pourquoi le titre courant disparaît sur la première page d’un chapitre, comment \leftmark et \rightmark amènent les titres de chapitre et de section dans l’en-tête, et comment \pagenumbering numérote les pages liminaires en chiffres romains et le corps en chiffres arabes.
Les quatre styles de page que \pagestyle propose
En LaTeX standard, les en-têtes et les pieds ne se règlent pas emplacement par emplacement : on bascule d’un bloc entier portant un nom, le style de page. \pagestyle{headings} dans le préambule vaut de cet endroit jusqu’à la fin du document, tandis que \thispagestyle{empty} dans le corps ne remplace le style que pour la page en cours. Il en existe exactement quatre en standard.
| Style | Ce qui apparaît |
|---|---|
empty | En-tête et pied vides ; aucun numéro de page |
plain | En-tête vide, numéro centré en pied. Style par défaut de article / report |
headings | Pied vide ; l’en-tête porte les titres de chapitre/section et le numéro. Style par défaut de book |
myheadings | Même disposition que headings, mais la mise à jour automatique cesse : le texte vient de \markboth / \markright |
Le style déjà en vigueur dépend de la classe de document. article et report démarrent en plain : rien qu’un numéro centré en pied. book démarre en headings, avec les titres de chapitre et de section qui courent en haut. La différence n’a rien d’arbitraire : un article de dix pages n’a pas besoin d’annoncer à chaque page où l’on se trouve, alors que dans un livre de quatre cents pages, le titre courant est précisément ce qui permet de repasser de l’index au texte.
Le contenu que headings place dans le titre courant est lui aussi fixé par la classe. Dans un book recto-verso, les pages paires (de gauche) portent le titre du chapitre et les pages impaires (de droite) le titre de section, le numéro restant toujours du côté extérieur, en gouttière. myheadings coupe la mise à jour automatique et laisse fournir les textes à la main, par \markboth{page gauche}{page droite} en recto-verso ou \markright{page droite}. Les styles intégrés ne plient pas au-delà : une disposition aussi banale que « titre du document à gauche, numéro de page à droite » leur échappe déjà. À partir de là, c’est l’affaire de fancyhdr.
Pourquoi l’en-tête disparaît sur la première page d’un chapitre
La réponse est inscrite dans \chapter lui-même. Dans book.cls, la deuxième ligne de \chapter, juste après le saut de page, est \thispagestyle{plain}. Une page d’ouverture de chapitre bascule donc en plain — pas d’en-tête, seulement un numéro centré en pied — quel que soit le réglage choisi. \part et \maketitle font exactement la même chose. C’est pourquoi un document déclaré \pagestyle{empty} affiche malgré tout un numéro sur sa page de titre et au début de chaque chapitre.
Le correctif dépend de l’objectif. Pour supprimer aussi le numéro, \thispagestyle{empty} s’écrit juste après \chapter{…} : dans le préambule il resterait sans effet, puisque \chapter écrase le réglage au moment de son exécution. Pour que l’ouverture de chapitre s’accorde au contraire au reste du livre, c’est le style plain lui-même qu’il faut reconstruire. C’est le rôle de \fancypagestyle{plain}{…}, fourni par fancyhdr : défini une fois, il fait que chaque \chapter réclamant plain reçoive la mise en page voulue et non celle de la classe.
% Fix 1: drop the page number too, on this chapter page only.
% This must come AFTER \chapter, never in the preamble.
\chapter{Introduction}
\thispagestyle{empty}
% Fix 2: redefine plain, so every chapter opening follows your design.
\fancypagestyle{plain}{%
\fancyhf{}%
\fancyfoot[C]{\thepage}%
\renewcommand{\headrulewidth}{0pt}%
}\pagestyle{fancy} : les six emplacements de fancyhdr
Une fois fancyhdr chargé et \pagestyle{fancy} déclaré, six emplacements s’ouvrent : gauche (L), centre (C) et droite (R) dans l’en-tête, et les trois mêmes dans le pied, prêts à être remplis. L’auteur est Pieter van Oostrum et la ligne de copyright du paquet part de 1994. Le nom tronqué a son histoire. La première version s’appelait fancyheadings.sty, mais MS-DOS — encore bien vivant à l’époque — ne conservait que huit caractères d’un nom de fichier : sur le disque, elle devenait fancyhea.sty. Certains se sont mis à écrire \usepackage{fancyhea}, et ces documents ne compilaient plus sous Unix. L’auteur en a été assez agacé pour rebaptiser le paquet d’un nom tenant en huit caractères : fancyhdr.
L’usage consiste à vider d’abord les six emplacements avec \fancyhf{}, puis à ne remplir que les utiles. Sans ce nettoyage, les titres courants de la classe peuvent subsister en dessous et le même texte apparaît deux fois. Le remplissage se fait avec \fancyhead[L]{…} / [C] / [R] et \fancyfoot[L]{…} / [C] / [R] ; les lettres de position se combinent, comme dans \fancyhead[LO,RE]{…}, pour régler plusieurs emplacements d’un coup.
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{} % clear all six slots first
\fancyhead[L]{Document title} % header, left
\fancyhead[R]{\thepage} % header, right: the page number
\fancyfoot[C]{\today} % footer, centreDans les documents recto-verso (twoside), les positions se combinent avec les pages paires (E) et impaires (O). [LE,RO] signifie « à gauche sur les pages paires, à droite sur les impaires » : l’angle extérieur d’une double page, côté gouttière, place traditionnelle du numéro. Une spécification sans E ni O, comme [L], dépose le même contenu des deux côtés. Les filets sous l’en-tête et au-dessus du pied s’appellent \headrulewidth et \footrulewidth, valant par défaut 0.4pt et 0pt (pas de filet). Attention : ce sont des macros et non des longueurs ; on les modifie avec \renewcommand et non \setlength — presque tout le monde s’y fait prendre une fois.
\renewcommand{\headrulewidth}{0.4pt} % header rule; this is the default
\renewcommand{\footrulewidth}{0pt} % no footer rule; also the defaultMettre le titre du chapitre dans l’en-tête : \leftmark et \rightmark
Il suffit d’écrire \fancyhead[L]{\leftmark} pour que le titre de chapitre de la page vienne se loger dans l’en-tête. Dans book et report, \leftmark contient le chapitre courant et \rightmark la section courante, leur contenu étant remplacé à chaque \chapter ou \section traité. article n’a pas de chapitres : tout descend d’un cran. En recto-verso, \leftmark porte la section et \rightmark la sous-section ; dans le recto seul par défaut, c’est \rightmark qui porte la section.
Sous tout cela se trouve la primitive \mark de TeX. Chaque fois que TeX assemble une page, il conserve séparément deux des marques qui y sont apparues : la première (\firstmark) et la dernière (\botmark). Le noyau de LaTeX définit alors \leftmark comme la moitié gauche de \botmark et \rightmark comme la moitié droite de \firstmark. L’asymétrie dernière/première s’éclaire dès qu’on pense à un dictionnaire : les mots-repères en haut d’une page ne servent que s’ils nomment la première et la dernière entrée réellement imprimées dessus. La conception se manifeste aussi à l’usage. Lorsqu’une section commence au milieu d’une page, \rightmark récupère la première marque de cette page : le titre courant annonce donc la section qui vient tout juste de commencer plus bas, et non celle qui remplit la moitié supérieure. C’est le comportement prévu, pas une anomalie.
L’autre écueil classique est la capitalisation. Les classes standard font passer les titres par \MakeUppercase dans \chaptermark et \sectionmark avant de les confier à la marque : \leftmark contient donc déjà quelque chose comme « CHAPTER 1. INTRODUCTION ». Pour retrouver la casse d’origine, on l’enveloppe dans \nouppercase, fourni par fancyhdr, qui compose son argument dans un environnement où \MakeUppercase et \uppercase ne font rien. L’annulation vaut cependant pour tout le contenu : des capitales voulues dans le même emplacement sautent aussi. Pour maîtriser entièrement le texte du titre courant, on appelle soi-même \markboth / \markright, ou l’on redéfinit \chaptermark.
% Chapter title on the left, page number on the right.
% \nouppercase undoes the \MakeUppercase applied by the class.
\fancyhead[L]{\nouppercase{\leftmark}}
\fancyhead[R]{\thepage}
% Or set the running-head text by hand, with no automatic updating.
\pagestyle{myheadings}
\markboth{Left-hand page text}{Right-hand page text}Corriger Package fancyhdr Warning: \headheight is too small
L’avertissement indique que la boîte destinée à l’en-tête est plus basse que son contenu. Il suffit d’agrandir \headheight jusqu’à la valeur annoncée pour qu’il disparaisse. Les classes standard fixent \headheight à 12pt, et un filet de 0,4 pt avec l’interligne au-dessus suffit à déborder — d’où l’apparition de l’avertissement dès la première compilation après le chargement de fancyhdr. Le message donne lui-même la hauteur nécessaire : le nombre qui suit Make it at least … se reprend tel quel.
Deux voies pour l’agrandir : \setlength{\headheight}{15pt} directement, ou l’option headheight= de geometry. Les deux font taire l’avertissement, mais si geometry figure déjà dans le préambule, mieux vaut y regrouper la valeur : \headheight entre dans le même calcul que la hauteur du texte et \topmargin, et modifier une seule de ces grandeurs après coup peut décaler la tache de texte vers le bas. Sans geometry, le geste classique consiste à faire suivre \setlength d’une ligne comme \addtolength{\topmargin}{-3pt} pour que les totaux se retrouvent — et c’est précisément l’ajustement que suggère le message.
% Either one of these is enough.
\setlength{\headheight}{15pt} % enlarge the header box directly
\addtolength{\topmargin}{-3pt} % ... and keep the vertical totals unchanged
% Or let geometry do the arithmetic for the whole page.
\usepackage[headheight=15pt]{geometry}Passer la numérotation de i, ii, iii à 1, 2, 3 (\pagenumbering)
\pagenumbering{roman} numérote les pages suivantes en i, ii, iii…, et \pagenumbering{arabic} ramène 1, 2, 3…. Le point essentiel : la commande ne change pas seulement le format, elle remet le compteur de page à 1. La définition de LaTeX commence littéralement par \global\c@page \@ne. La disposition habituelle des livres — pages liminaires en romain à partir de i, corps en arabe à partir de 1 — tient donc en deux lignes.
| Argument | Sortie |
|---|---|
arabic | chiffres arabes : 1, 2, 3 … (défaut) |
roman | chiffres romains minuscules : i, ii, iii … (pages liminaires) |
Roman | chiffres romains majuscules : I, II, III … |
alph | lettres minuscules : a, b, c … La page 27 s’arrête sur ! LaTeX Error: Counter too large. |
Alph | lettres majuscules : A, B, C … Épuisées elles aussi au bout de 26 pages |
Avec la classe book, ces deux lignes sont déjà écrites : \frontmatter est défini avec \pagenumbering{roman} et \mainmatter avec \pagenumbering{arabic}, si bien que les ajouter soi-même refait deux fois la même bascule — sans dommage, mais en pure perte. article et report ignorent \frontmatter ; on y appelle donc \pagenumbering à la main. Pour partir d’un nombre quelconque, \setcounter{page}{7} ; pour lire le numéro courant, \thepage. Un piège mérite d’être signalé : alph et Alph ne disposent de lettres que pour 26 pages, et la page 27 interrompt la compilation par ! LaTeX Error: Counter too large.
% book: \frontmatter and \mainmatter already switch the numbering.
\frontmatter % includes \pagenumbering{roman}
\tableofcontents
\mainmatter % includes \pagenumbering{arabic}
% article / report: no \frontmatter, so do it by hand.
\pagenumbering{roman} % i, ii, iii ... and the counter is reset to 1
\tableofcontents
\clearpage
\pagenumbering{arabic} % 1, 2, 3 ... counting starts over
\setcounter{page}{7} % or force any starting numberUn en-tête de livre recto-verso, du début à la fin
Rassemblées dans un même préambule, ces pièces donnent la disposition traditionnelle du livre : numéro sur le bord extérieur de la double page, titre de chapitre à l’intérieur des pages paires, titre de section à l’intérieur des pages impaires, et un filet fin sous l’en-tête. La page d’ouverture de chapitre est le seul endroit où \chapter impose plain ; \fancypagestyle{plain} est donc redéfini pour l’intégrer à la même mise en page.
\documentclass[twoside]{book}
\usepackage[headheight=15pt]{geometry}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{} % clear all six slots first
\fancyhead[LE,RO]{\thepage} % page number on the outer edge
\fancyhead[RE]{\nouppercase{\leftmark}} % even page, inner edge: chapter
\fancyhead[LO]{\nouppercase{\rightmark}} % odd page, inner edge: section
\renewcommand{\headrulewidth}{0.4pt} % thin rule under the header
\renewcommand{\footrulewidth}{0pt} % no rule above the footer
\fancypagestyle{plain}{% % chapter openings, same design
\fancyhf{}%
\fancyfoot[C]{\thepage}%
\renewcommand{\headrulewidth}{0pt}%
}
\begin{document}
\chapter{Introduction}
\section{Background}
Body text goes here. From the next page on, the running head shows
the chapter, the section and the page number.
\end{document}Pour finir, une règle empirique. Un document court en recto seul auquel un numéro en pied suffit se contente de \pagestyle{plain}, sans rien ajouter. S’il s’agit seulement de faire figurer les titres de chapitre et de section en haut, \pagestyle{headings} y pourvoit déjà. On passe à fancyhdr au moment où l’on veut décider soi-même des positions et des fontes. N’introduire chaque couche qu’une fois réellement nécessaire donne le préambule qui tient le plus longtemps. Et un principe vite oublié : le titre courant existe pour que le lecteur sache où il se trouve ; le chapitre ou la section en cours y travaille donc généralement mieux que le titre du document.