LaTeX appliqué aux sciences humaines


précédentsommairesuivant

Cinquième partie : Quelques éléments de mise en forme

« La typographie est simple, aussi simple que de jouer du violon ! »

Maximilien VOX, typographe

22. Chapitre 22 - Personnaliser en-têtes et pieds de pages

Nous allons voir comment personnaliser les en-têtes et pieds de pages à l'aide du package fancyhdr.

22-A. Utiliser l'un des styles standards

LaTeX propose quatre styles standards de page, qui définissent le contenu des en-têtes et pieds de pages. Pour utiliser l'un de ces styles, on emploie la commande \pagestyle{⟨style⟩}.

On peut également modifier le style d'une page en particulier grâce à la commande \thispagestyle{⟨style⟩}.

Ces styles sont :

empty pas d'en-tête ni de pied de page.
plain pas d'en-tête, mais pieds de pages contenant le numéro de page en centré. C'est le style correspondant aux pages de début de chapitre (☞ Textes en retraitTextes en retrait).
heading pas de pied, en-têtes contenant le titre du chapitre, de la section ou de la sous-section et le numéro de la page. C'est le style par défaut.
myheading similaire au précédent, mais l'en-tête peut être personnalisé(181).

On voit vite les limites de ces styles. Ainsi, comment avoir à la fois les titres en en-tête et les numéros des pages en pied de page ? Comment indiquer son nom ou la date en pied de page ?

22-B. Premiers exemples avec fancyhdr

Le package fancyhdr propose un autre style, qu'il est aisé de personnaliser via des commandes spécifiques. Pour faire fonctionner fancyhdr il faut écrire les lignes suivantes dans le préambule :

 
Sélectionnez
1.
2.
\usepackage{fancyhdr}
\pagestyle{fancy}

Les pages de début de chapitre ont automatiquement le style « plain ». Pour désactiver ce style par défaut, il faut modifier la commande \chapter.
Nous en parlons dans un autre chapitre (☞ Textes en retraitTextes en retrait).

On peut ensuite utiliser les six commandes de fancyhdr qui servent à définir le contenu des en-têtes et pieds de pages :

\lhead reçoit comme argument le contenu de la partie gauche de l'en-tête, justifiée à gauche.
\chead reçoit comme argument la partie centrale de l'en-tête, centrée.
\rhead reçoit comme argument la partie droite de l'en-tête, justifiée à droite.
\lfoot reçoit comme argument la partie gauche du pied de page, justifiée à gauche.
\cfoot reçoit comme argument la partie centrale du pied de page, centrée.
\rfoot reçoit comme argument la partie droite du pied de page, justifiée à droite.

Supposons que nous souhaitions afficher le numéro des pages en pied de page centré, en indiquant également le nombre total de pages. Nous allons utiliser le package totpages qui nous permet, après deux compilations, ou plus si le nombre de pages varie entre les compilations, d'obtenir le nombre total de pages.

 
Sélectionnez
1.
2.
3.
4.
\usepackage{fancyhdr}
\pagestyle{fancy}
\usepackage{totpages}
\cfoot{{\thepage} / \ref{TotPages}}

La commande \thepage indique la valeur du compteur page (☞ Choisir la profondeur de la table des matières : la notion de compteurChoisir la profondeur de la table des matières : la notion de compteur), correspondant au numéro de page.

Vous pouvez constater le résultat sur cette page.

22-C. Pages recto verso et alternance gauche-droite

Lorsqu'un travail est imprimé en recto verso, on peut souhaiter que l'en-tête et le pied de page gauches des pages impaires correspondent à l'en-tête et au pied de page droits des pages paires et vice-versa.

Le package fancyhdr a prévu ce cas. Il propose deux commandes :

L'argument ⟨position⟩ peut prendre une ou plusieurs des valeurs suivantes :

C centre
LO gauche des pages impaires (= intérieur des pages de droite, si on écrit de gauche à droite).
RO droite des pages impaires (= extérieur des pages de droite, si on écrit de gauche à droite).
LE gauche des pages paires (= extérieur des pages de gauche, si on écrit de gauche à droite).
RE droite des pages paires (= intérieur des pages de gauche, si on écrit de gauche à droite).

Ainsi pour mettre le numéro de page à l'extérieur du pied de page, il suffit d'écrire :

 
Sélectionnez
\fancyfoot[LE,RO]{\thepage}

Évidemment, si l'on dit à LaTeX de générer un fichier à destination d'une impression monoface (☞ La classe du documentLa classe du document), il considère qu'il n'y a que des pages recto, c'est-à-dire impaires.

22-D. Titres dans l'en-tête : le mécanisme des marqueurs

Dans la classe book, les en-têtes contiennent par défaut les titres de chapitres sur la page de gauche et de sections sur la page de droite. En utilisant le style 193/268.

Chapitre 22 Personnaliser en-têtes et pieds de pages fancy, on insère automatiquement les titres de chapitres du côté interne et ceux de sections dans le côté externe.

Si on utilise fancyhdr pour ne personnaliser que le pied de page, on peut vouloir rétablir pour le reste la présentation par défaut. Il est nécessaire pour cela de comprendre le mécanisme des marqueurs de LaTeX.

Le principe de base est simple : des commandes de marquage vont stocker en mémoire des marqueurs. Lesdits marqueurs sont appelés par d'autres commandes.

Les deux commandes de marquage sont :

Les deux commandes d'appel des marqueurs sont :

  • \leftmark qui retourne l'argument ⟨marqueur gauche⟩ de la dernière commande \markboth ;
  • \rightmark qui retourne l'argument ⟨marqueur droit⟩ de la première commande \markright ou \markboth située sur la page courante. En revanche, si la page en cours ne contient aucune de ces commandes, alors \rightmark retourne l'argument ⟨marqueur droit⟩ du dernier \markright ou \markboth utilisé.

Concrètement, les commandes \markboth et \markright sont appelées automatiquement dans la classe book par les commandes \chapter et \section via les commandes \chaptermark et \sectionmark.

22-D-a. Appeler les marqueurs dans les styles fancy

Pour rétablir la présentation originelle, il nous faut insérer les commandes \leftmark et \rightmark dans nos commandes \fancyhead.

 
Sélectionnez
1.
2.
3.
\fancyhead[LE,RO]{}
\fancyhead[RE]{\leftmark}
\fancyhead[LO]{\rightmark}

Avec ceci, nous obtenons à nouveau le titre de chapitre à gauche et le titre de section à droite.

Les en-têtes et pieds de pages sont calculés par LaTeX après le reste de la page. C'est pourquoi on obtient dans l'en-tête le contenu de la dernière section de la page.

22-D-b. Redéfinir les commandes \chaptermark et \sectionmark

Supposons désormais que vous ne souhaitez plus voir les titres des sections dans les en-têtes. Le plus simple est alors de redéfinir la commande \sectionmark, pour la rendre nulle :

 
Sélectionnez
\renewcommand{\sectionmark}[1]{}

Notez bien que nous indiquons que la commande \sectionmark prend un argument, alors même que nous ne nous en servons pas. Mais lorsque la classe book appelle cette commande, elle lui passe bien un argument, qui est le titre de la section.

Comme alors on n'affiche plus que le titre du chapitre, il est peut-être inutile de préciser qu'il s'agit d'un chapitre. Il faut alors redéfinir la commande \chaptermark, par exemple sous la forme suivante :

 
Sélectionnez
1.
2.
\renewcommand{\chaptermark}[1]{\markboth {\MakeUppercase{%
\thechapter~#1}}{}}

Si vous vous amusez à fouiller le fichier book.cls, vous verrez que la commande \chaptermark est définie deux fois. En réalité, sa définition est conditionnée par l'option de classe twoside ou oneside (☞ La classe du documentLa classe du document).

La commande \thechapter sert à afficher le numéro du chapitre, stocké dans un compteur chapter. Nous parlons plus loin des compteurs et des commandes \the⟨compteur⟩(☞ Redéfinir la numérotationRedéfinir la numérotation).

22-E. Filet d'en-têtes et de pieds de pages

Le package fancyhdr inclut un filet entre le corps du texte et l'en-tête. Il est possible de modifier l'épaisseur de ce filet, ainsi que de rajouter un filet avant le pied de page.

On redéfinit pour cela les commandes \headrulewidth et \footrulewidth, qui doivent renvoyer une longueur (☞ Annexe EAnnexe E - Unités de mesure en LaTeX). Par exemple, pour supprimer le filet au-dessous de l'en-tête, mais en ajouter un de 0,05 mm au-dessus du pied de page, on écrit :

 
Sélectionnez
1.
2.
\renewcommand{\headrulewidth}[0]{0pt}
\renewcommand{\footrulewidth}[0]{0.05mm}

23. Chapitre 23 - Apparence des textes

Dans ce chapitre nous verrons comment changer l'apparence de nos textes : polices de caractères, interlignes, styles des niveaux de titres.

23-A. Police de caractères

Il existe trois grandes familles de polices de caractères :

À empattements pour le corps du texte. Ces empattements améliorent le confort de lecture, sur version papier du moins.
Sans empattement normalement pour les titres sur les couvertures.
À pas fixe qui se caractérisent par le fait que la largeur des caractères ne varie pas en fonction des lettres, mais reste uniforme d'une lettre à l'autre. Ces polices sont utilisées par les informaticiens pour citer du code informatique. Dans notre domaine, elles peuvent éventuellement servir pour une transcription diplomatique d'un texte ancien. On utilisera pour cela l'environnement verbatim.

Le package fontspec(182) propose de définir une police pour chaque famille de caractères. Ainsi pour ce livre avons-nous choisi les polices « Linux Libertine » pour les caractères avec empattements, « Linux Biolinum » pour les caractères sans empattement(183) et « DejaVu Sans Mono » pour les caractères à espacements fixes.

Nous avons indiqué dans notre préambule que nous souhaitons les utiliser :

 
Sélectionnez
1.
2.
3.
\setmainfont[Mapping=tex-text]{Linux Libertine}
\setsansfont[Mapping=tex-text]{Linux Biolinum}
\setmonofont[Scale=0.75]{DejaVu Sans Mono}

La commande \setmainfont sert à définir la police avec empattements (corps du texte), \setsansfont celle sans empattement et \setmonofont la police à espacements fixes. L'argument optionnel peut prendre un certain nombre de paramètres pour la police.

Ici nous avons indiqué avec le paramètre Scale que nous souhaitons réduire de 25 % la taille de la police « DejaVu Sans Mono », car il s'agit d'une police assez grande.

L'option Mapping=tex-text des deux premières commandes permet de gérer de manière particulière certaines suites de caractères, par exemple de remplacer trois tirets courts (---) par un tiret long (-) (☞ Le corps du texte : la manière de rédigerLe corps du texte : la manière de rédiger).

Il existe d'autres paramètres, par exemple pour gérer finement les ligatures, précisés dans le manuel de fontspec(184).

Le package fontspec permet de définir d'autres familles de caractères.

Toutefois il n'est en général pas recommandé de varier les polices dans un texte : c'est pourquoi nous ne détaillons pas ici, mais nous nous contentons de renvoyer à la documentation du package(185).

23-B. Interlignes

Le package setspace - qui ne possède pas de documentation officielle - permet de changer facilement l'interligne du document en proposant trois interlignages : simple, c'est le réglage standard, double et « un et demi ». En général une interligne de 1,5 est recommandée pour les travaux universitaires, sauf pour les notes de bas de pages, où un interlignage simple est de mise. Cela tombe bien : le package n'applique le changement d'interlignes qu'au corps du texte.

Les notes de bas de page sont donc préservées.

Le package setspace « se contente » de définir des nouvelles commandes pour exécuter des suites complexes de commandes TeX et LaTeX nécessaires à la définition de l'interligne en tenant compte de la taille de la police.
Si donc vous souhaitez définir une autre taille d'interligne, vous pouvez essayer de vous inspirer du code du package. Mais ceci nécessite de maîtriser assez bien LaTeX.

Les trois commandes qui nous intéressent sont :

Elles s'utilisent de la manière suivante :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
\doublespacing
Ce texte est en interligne double.
\onehalfspacing
Ce texte est en interligne 1,5.
\singlespacing
Ce texte est en interligne simple.

Tant qu'aucune commande de changement d'interligne n'est utilisée, le texte reste dans l'interligne courante.

23-B-a. « Commande à arguments » et « commande de bascule »

Jusqu'à maintenant, à quelques exceptions près, nous n'avons vu que des commandes prenant un certain nombre d'arguments. Ici nos commandes ne prennent pas d'argument, mais changent des paramètres, jusqu'à nouvel ordre.

On appelle de telles commandes commandes de bascule. Ainsi, nos commandes de bascule du package setspace changent l'interligne de notre texte. L'utilisation des commandes de bascule est nécessaire pour la redéfinition de certaines commandes de LaTeX, dont les commandes des titres (☞ Définir l'apparence : sections et niveaux inférieursDéfinir l'apparence : sections et niveaux inférieurs).

Une commande de bascule entourée d'accolades n'a d'effet qu'au sein de la paire d'accolades. Une commande de bascule utilisée dans un environnement n'a d'effet que dans cet environnement. Si une commande de bascule est utilisée dans le préambule, elle a en général un effet dans l'ensemble du document.

Nous avons déjà présenté plus haut des commandes à bascule : celles de modification de la taille des caractères (☞ Taille des caractèresTaille des caractères).

Il est donc recommandé de mettre la commande \onehalfspacing en tout début de fichier, par exemple dans le préambule, pour agir sur tout le corps du texte.

23-B-b. Environnements de changement d'interligne

Le package setspace propose également trois environnements qui permettent de limiter la portée d'un changement d'interligne.

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
\begin{singlespace}
Texte avec une interligne simple
\end{singlespace}
\begin{onehalfspace}
Texte avec une interligne 1,5.
\end{onehalfspace}
\begin{doublespace}
Texte avec une interligne double.
\end{doublespace}
 

23-B-c. (Re)définir un environnement : exemple avec l'environnement quotation

En général, les citations ont un interlignage plus réduit que le corps du texte.

Aussi la tentation serait-elle grande, pour obtenir cet effet dans un document en interligne 1,5, de frapper ceci :

 
Sélectionnez
1.
2.
3.
4.
5.
\begin{singlespace}
\begin{quotation}
Une citation assez longue.
\end{quotation}
\end{singlespace}

Une telle méthode viole le principe de séparation de fond et de forme. Elle multiplie en outre les lignes de code. Il serait plus sage de redéfinir l'environnement quotation. Voici comment faire simplement(186). Nous avons déjà vu plus haut un exemple de redéfinition d'environnement, pour l'environnement latin (☞ Le problème du latinLe problème du latin).

Il s'agit ici non seulement de redéfinir l'environnement, mais aussi de réutiliser les propriétés de l'ancien environnement. On procède en insérant ce code en début de document, dans le préambule :

 
Sélectionnez
1.
2.
3.
4.
5.
\let\oldquotation\quotation
\let\endoldquotation\endquotation
\renewenvironment{quotation}
    {\begin{oldquotation}\singlespace}
        {\end{oldquotation}}

Commentaires :

ligne 1 la commande \letest une commande TeX qui copie une commande dans une autre commande. Ici nous copions la commande \quotation dans la commande \oldquotation(187). La commande \quotation quant à elle correspond au début de l'environnement quotation, c'est-à-dire à ce qui est exécuté par \begin{quotation}.
ligne 2 nous copions la commande \endquotation, correspondant à la fin de l'environnement quotation - c'est-à-dire à ce qui est exécuté lors du \end{quotation}, à l'intérieur d'une commande \endoldquotation.

En créant ces deux commandes \oldquotation> et \endoldquotation nous avons créé un environnement oldquotation.

ligne 3 nous redéfinissons l'environnement quotation.
ligne 4 au début de cet environnement (☞ Le problème du latinLe problème du latin), nous ouvrons l'environnement oldquotation puis nous exécutons la commande \singlespace.
ligne 5 à la fin de l'environnement quotation, nous fermons l'environnement oldquotation. La commande \singlespace ne s'applique qu'au contenu de l'environnement dans lequel elle est située (☞ « Commande à arguments » et « commande de bascule »« Commande à arguments » et « commande de bascule »). C'est pourquoi il n'est pas nécessaire de l'annuler par une commande \onehalfspace.

Si vous avez compris nos propos sur les commandes de début et de fin d'environnement, vous pouvez vous rendre compte que nous aurions pu obtenir le même résultat avec :

 
Sélectionnez
1.
2.
\let\endoldquotation\endquotation
\renewcommand{\quotation}{\oldquotation\singlespace}

23-C. Personnaliser les titres

23-C-a. Redéfinir la numérotation

Nous avons abordé plus haut la notion de compteur. À chaque niveau de titre, LaTeX associe un compteur niveau. Ainsi le compteur associé au niveau de titre \chapter est chapter (☞ Choisir la profondeur de la table des matières : la notion de compteurChoisir la profondeur de la table des matières : la notion de compteur).

La valeur d'un compteur peut s'afficher via la commande \the⟨compteur⟩.

Ainsi, si vous écrivez :

 
Sélectionnez
\thechapter : \thesection

Vous constatez qu'à la compilation apparaît le numéro du chapitre, tel qu'il apparaît dans l'en-tête, et le numéro de section, tel qu'il apparaît dans le titre.

Ici par exemple nous obtenons :

Image non disponible

Puisque les compteurs s'affichent à l'aide de commandes, il est aisé de redéfinir celles-ci. Si vous fouillez le fichier (☞ Trouver les fichiers standardsTrouver les fichiers standards) book.cls, vous pouvez constater(188), les deux (re)définitions de commande suivantes :

 
 
Sélectionnez
1.
2.
\renewcommand \thechapter {\@arabic\c@chapter}
\renewcommand \thesection {\thechapter.\@arabic\c@section}
Ligne 1 \thechapter affiche la valeur du compteur chapter, retournée par \c@chapter. Cette valeur ne peut pas être affichée directement, elle doit être au préalable formatée par la commande \@arabic, qui l'affiche sous forme de chiffres arabes.
Ligne 2 \thesection retourne \thechapter suivi d'un point, suivi de la valeur du compteur section affichée sous forme de chiffres arabes.

Supposons maintenant que nous souhaitons :

  • Afficher en chiffres romains majuscules le numéro de chapitre ;
  • Afficher une parenthèse fermante après le numéro de section.

Il nous suffit de redéfinir ainsi ces commandes :

 
Sélectionnez
1.
2.
\renewcommand \thechapter {\@Roman\c@chapter}
\renewcommand \thesection {\thechapter.\@arabic\c@section)}

Si vous écrivez ces lignes dans votre préambule, vous n'arriverez pas à compiler.

Cela tient à une raison simple : les commandes contenant le caractère @ ne peuvent pas être utilisées dans un fichier .tex, mais uniquement dans les fichiers de définition de classe (.cls) ou de package (.sty).

Pour pouvoir les utiliser dans un fichier .tex, il faut les entourer des commandes \makeatletter et \makeatother.

Ce qui nous donne :

 
Sélectionnez
1.
2.
3.
4.
\makeatletter
\renewcommand \thechapter {\@Roman\c@chapter}
\renewcommand \thesection {\thechapter.\@arabic\c@section)}
\makeatother

On obtient donc un affichage de la forme :

Image non disponible

Nous parlons plus loin de la manière de manipuler les compteurs (☞ Manipuler les compteurs : le cas des notes de bas de pageManipuler les compteurs : le cas des notes de bas de page).

23-C-b. Définir l'apparence : sections et niveaux inférieurs

Pour personnaliser l'apparence des titres, le mieux est de regarder ce que nous proposent les classes standards. Prenons le cas de la classe book, définie dans le fichier (☞ Trouver les fichiers standardsTrouver les fichiers standards) book.cls. En cherchant un peu, nous trouvons(189) :   

 
Sélectionnez
1.
2.
3.
4.
\newcommand\section{\@startsection {section}{1}{\z@}%
                                         {-3.5ex \@plus -1ex \@minus -.2ex}%
                                         {2.3ex \@plus.2ex}%
                                         {\normalfont\Large\bfseries}}

Commentons ces quelques lignes :

ligne 1 La commande \section fait appel à \@startsection. Cette dernière commande ajoute un niveau de titre à la table des matières. Malgré son nom, elle peut servir pour n'importe quel niveau de titre (par exemple, pour les \subsections). Elle prend plusieurs arguments. Le premier est le niveau : ici section. Le second est le niveau de profondeur : 1. Le troisième est l'indentation préalable : ici \z@, c'est-à-dire une longueur nulle.
ligne 2 quatrième argument de la commande \@startsection, qui indique l'espace vertical avant le titre. Cet espace est idéalement de 3,5 ex (☞ Annexe EAnnexe E - Unités de mesure en LaTeX), mais peut être compris entre 1,5 ex (3,5 - 2) et 4,5 ex (3,5 + 1) : cette marge de manœuvres est indiquée par les commandes \@minus et \@plus (☞ ÉlasticitéÉlasticité).
ligne 3 cinquième argument de \@startsection, qui indique l'espace vertical après le titre. Notre longueur étant positive, le texte qui suit débute un nouveau paragraphe. Une longueur négative (comme c'est le cas pour la définition de la commande \paragraph) indique qu'il n'y a pas de changement de paragraphe. Ici donc, l'espace après le titre est de 2,3 ex, mais peut atteindre 2,5 ex (2,3 + 0,2).
ligne 4 sixième et dernier argument de \@startsection, qui indique l'apparence proprement dite de notre titre. Il s'agit d'un texte en police normale - c'est-à-dire celle définie par la commande \setmainfont -, en taille \Large, mise en gras (\bfseries). Ici toutes nos commandes sont prises comme des commandes de bascule, la bascule finissant avec l'accolade fermante. La commande \bfseries est l'équivalent à bascule de la commande \textbf. Il est recommandé de n'utiliser dans les styles de titre que des commandes à bascule, pour éviter des espaces indésirables.

Supposons maintenant que nous souhaitons avoir notre titre en italique et en police sans empattement. Il nous suffit de redéfinir la commande \section, en entourant notre définition de \makeatletter et \makeatother (☞ Redéfinir la numérotationRedéfinir la numérotation).

 
Sélectionnez
1.
2.
3.
4.
5.
6.
\makeatletter
\renewcommand\section{\@startsection {section}{1}{\z@}%
                                         {-3.5ex \@plus -1ex \@minus -.2ex}%
                                         {2.3ex \@plus.2ex}%
                                         {\sffamily\Large\itshape}}
\makeatother

La commande \ssfamily produit une bascule vers la police sans empattement définie par \setsansfont, tandis que \itshape produit une bascule vers un texte en italique.

23-D. Définir l'apparence : chapitres et niveaux supérieurs

Si l'on cherche dans le fichier book.cls la commande \chapter, on trouve(190) :

 
Sélectionnez
1.
2.
3.
4.
5.
\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
                    \thispagestyle{plain}%
                    \global\@topnum\z@
                    \@afterindentfalse
                    \secdef\@chapter\@schapter}

Deux éléments nous intéressent ici.

Le premier est la ligne 2 : \thispagestyle{plain}. On comprend ainsi la raison pour laquelle les pages de début de chapitre ne sont pas numérotées au même endroit que les autres : le style de cette page est « plain » et non pas « heading », comme pour les autres pages (☞ Utiliser l'un des styles standardsUtiliser l'un des styles standards). Par conséquent, si l'on souhaite que les pages de titres aient les mêmes en-têtes et pieds de pages que les pages standards, il faut redéfinir la commande \chapter en supprimant \thispagestyle{plain}.

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
\makeatletter
\renewcommand\chapter{\if@openright\cleardoublepage %
                       \else\clearpage\fi
                       \global\@topnum\z@
                       \@afterindentfalse
                       \secdef\@chapter\@schapter}
                       \makeatother

Le second élément intéressant est la dernière ligne. La commande \secdef renvoie vers \@chapter si nous utilisons \chapter et vers \@schapter si nous utilisons \chapter*.

En fouillant les codes des commandes \@chapter et \@schapter nous trouvons qu'elles appellent \@makechapterhead et \@makeschapterhead, respectivement.

\@chapter, \@schapter, \@makechapterhead et \@makeschapterhead sont définies via la commande \def et non pas \newcommand.
En effet la définition est faite en TeX et non pas en LaTeX. Pour nos propos, cela n'a pas grande influence.

Intéressons-nous à la commande \@makechapterhead(191).

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
\def\@makechapterhead#1{%
    \vspace*{50\p@}%
    {\parindent \z@ \raggedright \normalfont
        \ifnum \c@secnumdepth >\m@ne
            \if@mainmatter
                \huge\bfseries \@chapapp\space \thechapter
                \par\nobreak
                \vskip 20\p@
            \fi
        \fi
        \interlinepenalty\@M
        \Huge \bfseries #1\par\nobreak
        \vskip 40\p@
    }}

Analysons-là :

ligne 2 la commande \vspace produit un espace vertical, ici de 50 pt, comme l'indique le 50\p@. La présence d'un astérisque indique que notre espace vertical continue après un changement de page.
ligne 3 la commande \parindent précise l'indentation du paragraphe à ce point précis : ici une longueur nulle (\z@). La commande \raggedright signifie que le texte va être aligné à gauche - à l'inverse \raggedleft signifierait que le texte serait aligné à droite. Quant à la commande \normalfont, inutile de dire qu'elle signifie que la police standard - celle définie par la commande \setmainfont - est utilisée.
lignes 4-5, 9, 10 on conditionne l'affichage d'un numéro de chapitre au positionnement dans la partie principale du document, celle qui suit \mainmatter (☞ La classe book : structuration globale du documentLa classe book : structuration globale du document), et à la valeur du compteur secnumdepth, que vous pouvez redéfinir pour empêcher la numérotation de certains niveaux de titre (☞ Manipuler les compteurs : le cas des notes de bas de pageManipuler les compteurs : le cas des notes de bas de page).
ligne 6 ligne 6 on affiche en taille \huge (☞ Taille des caractèresTaille des caractères) et en gras (\bfseries) la chaîne de langue de début de chapitre (\@chapapp) suivie d'une espace et du numéro de chapitre : le compteur chapter, affiché via la commande \thechapter.
ligne 7 on insère un paragraphe (\par) et on empêche un changement de ligne (\nobreak).
ligne 8 on insère un espace vertical de 20 pt.
ligne 11 au niveau visé par ce livre la compréhension de cette ligne n'est pas indispensable. Toutefois, pour les curieux, cette ligne sert à prévenir un titre s'étalant sur plusieurs lignes. Sommairement, on peut dire que pour prévenir les ruptures de lignes ou les changements de pages, LaTeX utilise des paramètres appelés « penalty ». Plus une « penalty » est importante, plus la probabilité d'une rupture est faible. Ici la « penalty » d'interlignage - de rupture de ligne - est définie à 1000 (\@M).
ligne 12 on affiche en taille \Huge et en gras (\bfseries) le titre du chapitre (#1). On introduit ensuite un paragraphe (\par), en demandant d'éviter les changements de pages (\nobreak).
ligne 13 on insère un espace vertical de 40 pt.

Nous allons maintenant fabriquer un nouveau style(192), où nous souhaitons avoir :

  • Le texte « chapitre » et le titre alignés à droite ;
  • Le texte « chapitre » en petites capitales, sans gras, et en taille normale ;
  • Un trait horizontal au-dessous du titre.

Nous allons donc reprendre le code existant et le copier-coller dans notre préambule entre \makeatletter et \makeatother. Nous allons ensuite effectuer les modifications suivantes :

Cela nous donne finalement :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
\makeatletter
\def\@makechapterhead#1{%
    \vspace*{50\p@}%
    {\parindent \z@ \raggedleft \normalfont
        \ifnum \c@secnumdepth >\m@ne
            \if@mainmatter
                \scshape \@chapapp\space \thechapter
                    \par\nobreak
                    \vskip 20\p@
            \fi
        \fi
        \interlinepenalty\@M
        \Huge \bfseries #1\par\nobreak
        \hrulefill
        \vskip 40\p@
    }}
\makeatother

Évidemment, il faudrait appliquer le même type de modifications sur la commande \makeschapterhead. On pourrait aussi s'amuser à modifier ce qui est produit par \part. Pour cela il faut, de la même façon, fouiller le fichier book.cls.

23-E. Manipuler les compteurs : le cas des notes de bas de page

Nous avons vu comment modifier l'aspect d'un compteur (☞ Redéfinir la numérotationRedéfinir la numérotation).

Mais comment modifier la valeur d'un compteur ? Il y a pour cela deux commandes :

  1. \setcounter{⟨compteur⟩}{⟨valeur⟩} pour affecter la valeur ⟨valeur⟩ au compteur ⟨compteur⟩ et
  2. \addtocounter{⟨compteur⟩}{⟨valeur⟩} pour additionner la valeur ⟨valeur⟩ au compteur ⟨compteur⟩. La valeur ajoutée pouvant être négative, il est ainsi possible de faire reculer un compteur.

En outre, il existe une commande \refstepcounter qui permet d'incrémenter d'une unité un compteur. C'est celle qui est utilisée par les commandes de niveau de titre (☞ Différents niveaux de titresDifférents niveaux de titres).

Un nouveau compteur se crée avec \newcounter{⟨compteur⟩}[⟨compteur2⟩].

Si l'argument ⟨compteur2⟩ est présent, alors il indique que la valeur du compteur ⟨compteur⟩ doit être réinitialisée lorsque la commande \refstepcounter est appliquée au compteur compteur2.

La commande \@addtoreset{⟨compteur⟩}{⟨compteur2⟩} permet d'appliquer cette règle sur un compteur déjà existant.

Ainsi, dans le fichier book.cls, vous remarquerez la ligne suivante(193) :

 
Sélectionnez
\@addtoreset{footnote}{chapter}

Ce qui signifie que le compteur footnote, qui correspond à la numérotation des notes de bas de page, est réinitialisé à chaque nouveau chapitre numéroté.

Si nous souhaitons annuler cette commande, pour avoir des notes de bas de page en numérotation continue, il nous faut utiliser le package remreset et sa commande \@removefromreset, qui annule un réglage de réinitialisation.

 
Sélectionnez
1.
2.
3.
4.
\usepackage{remreset}
\makeatletter
\@removefromreset{footnote}{chapter}
\makeatother

24. Chapitre 24 - Éléments de mise en page

Dans ce chapitre, nous allons voir quelques commandes permettant de modifier la mise en page. Rappelons qu'il ne faut normalement pas utiliser ces commandes telles quelles, mais les imbriquer dans des commandes de mise en sens (☞ Mettre en forme n'est pas mettre en sensMettre en forme n'est pas mettre en sens).

Il ne s'agit ici que d'une très courte introduction : d'autres ouvrages en parlent mieux que nous (194) . En ce qui concerne les unités de longueur, nous renvoyons à l'annexe E (☞ Annexe EAnnexe E - Unités de mesure en LaTeX).

24-A. Espacements

On peut produire un espace horizontal via \hspace{⟨longueur⟩}. Si on utilise \hspace*, la fin de ligne n'arrête pas l'espace.

Un espace vertical se produit par \vspace{⟨longueur⟩}. Si on utilise \vspace*, le changement de page n'affecte pas l'espace, qui continue sur la page suivante.

Toutefois, nous avons pu constater qu'une telle commande pose parfois des problèmes pour la mise en page du paragraphe qui la précède.

24-B. Longueurs de mise en page

Pour redéfinir des paramètres tels que l'espacement vertical entre deux paragraphes ou l'indentation initiale d'un paragraphe, il ne faut pas utiliser les commandes d'espacement, mais tout simplement redéfinir les longueurs de LaTeX.

Nous avons vu que pour l'interligne, il valait mieux utiliser le package setspace (☞ InterlignesInterlignes). Il nous reste donc deux longueurs : l'indentation initiale du paragraphe et l'espace entre les paragraphes. Ces longueurs sont \parindent et \parskip.

Pour les redéfinir, on utilise \setlength{⟨longueur⟩}{⟨valeur⟩}. Par exemple, pour redéfinir la longueur de l'indentation à trois cadratins :

 
Sélectionnez
\setlength{\parindent}{3ex}

Il existe aussi \addtolength{⟨longueur⟩}{⟨valeur⟩} qui ajoute valeur⟩ à la longueur déjà existante.

Ainsi pour ajouter 1 pt à l'espacement entre deux paragraphes :

 
Sélectionnez
\addtolength{\parskip}{1pt}

Ces redéfinitions doivent se pratiquer après le préambule, car elles ne s'appliquent qu'au groupe logique où elles surviennent, un groupe logique correspondant soit à un environnement, soit à un espace délimité par une paire d'accolades.

On peut supprimer l'indentation d'un paragraphe précis en le commençant par la commande \noindent.

24-C. Marges

Bien qu'il ne soit pas conseillé de le faire, on peut redéfinir les marges avec le package geometry. Lors du chargement du package, on dispose des options suivantes :

lmargin pour la marge gauche sur une impression une face, pour la marge intérieure sur une impression deux faces.
rmargin pour la marge droite sur une impression une face, pour la marge extérieure sur une impression deux faces.
tmargin pour la marge du haut.
bmargin pour la marge du bas.

Ainsi pour une impression avec seulement 1 cm de marge - ce qui n'est pas à conseiller, si ce n'est pour un brouillon - on peut charger ainsi le package :

 
Sélectionnez
\usepackage[lmargin=1cm,rmargin=1cm,tmargin=1cm,bmargin=1cm]{geometry}

On peut aussi modifier temporairement les réglages, pour une ou plusieurs pages, via la commande \newgeometry{⟨reglages⟩}. On restaure ensuite les réglages initiaux avec la commande \restoregeometry.

Par exemple pour avoir une page sans marge, on écrit :

 
Sélectionnez
1.
2.
3.
4.
\newgeometry{lmargin=0cm,rmargin=0cm,tmargin=0cm,bmargin=0cm}
Une page avec une marge nulle.
\newpage
\restoregeometry

Le package geometry possède de nombreuses autres fonctionnalités : nous renvoyons à sa documentation(195).

Si vous utilisez geometry et les notes de marge produites via \marginpar, vous pouvez constater que les pages de gauche (paires) n'affichent pas les notes. Le problème vient du fait que geometry redéfinit un certain nombre de longueurs. Pour afficher correctement les notes, il vous faut modifier la longueur \marginparwidth, en lui affectant la même valeur que \leftmargin.

 
Sélectionnez
\setlength{\marginparwidth}{\leftmargin}

24-D. Textes en retrait

On peut souhaiter avoir un environnement qui produit du texte en retrait, semblable à l'environnement quotation, comme un environnement exemple avec un retrait gauche de 3 em et un retrait droit de 1em.

 Si nous fouillons dans le fichier (☞ Trouver les fichiers standardsTrouver les fichiers standards) book.cls, nous trouvons que l'environnement quotation est défini de la manière suivante(196) :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
\newenvironment{quotation}
               {\list{}{\listparindent 1.5em %
                        \itemindent \listparindent
                        \rightmargin \leftmargin
                        \parsep \z@ \@plus\p@}%
                \item\relax}
               {\endlist}

Que nous pouvons analyser ainsi :

ligne 2 à 5 code exécuté en début d'environnement.
ligne 7 code exécuté en fin d'environnement. Nous fermons un environnement de type list - bien qu'effectivement, il ne s'agisse pas d'une liste !
ligne 2 la commande \list{⟨itemdefaut⟩}{⟨réglages typographiques⟩} ouvre un environnement list. Le premier argument correspond à ce qu'affiche la commande \item en l'absence d'argument optionnel. Comme dans quotation on n'utilise pas \item, ce premier argument est nul. Le second argument contient des commandes réglant la mise en forme. La première, \listparindent, indique l'indentation des paragraphes à l'intérieur de la liste : ici 1,5 em.
ligne 3 la seconde commande, \itemindent, indique l'indentation du premier élément de chaque \item : ici \itemindent se voit attribuer la valeur de \listparindent.
ligne 4 la marge de droite de notre liste (\rightmargin) se voit attribuer la même valeur que la marge de gauche (\leftmargin). Cette valeur a été définie auparavant dans le fichier book.cls.
ligne 5 la longueur séparant deux paragraphes à l'intérieur de la liste (\parsep) est fixée à 0 pt (\z@), mais peut s'étendre (\@plus) jusqu'à 1 pt (\p@) (☞ ÉlasticitéÉlasticité). Le second argument de la commande \list finit ici.
ligne 7 une liste ne peut pas fonctionner sans commande \item. C'est pourquoi cette commande est appelée ici. Pour éviter des ennuis, on indique que le texte de cet \item est nul, grâce à la commande \relax, qui est une commande servant à ne rien faire alors même que TeX attend un contenu.

Maintenant, nous voulons notre environnement exemple, avec :

  • une marge gauche plus forte, de trois cadratin (3 em) ;
  • une marge droite d'un cadratin (1 em) ;
  • un texte en italique.

Nous allons pour cela insérer dans le deuxième argument de la commande \list les lignes suivantes :

 
Sélectionnez
1.
2.
3.
\leftmargin 3em
\rightmargin 1em
\itshape

Ce qui nous donne finalement :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
\makeatletter
\newenvironment{exemple}
               {\list{}{\listparindent 1.5em%
                        \itemindent \listparindent
                        \leftmargin 3em
                \rightmargin 1em
                \itshape
                        \parsep \z@ \@plus\p@}%
                   \item\relax}
                  {\endlist}
\makeatother

Pour des textes encadrés ou sur fond coloré, on pourra utiliser le package mdframed et/ou le package fancybox(197).

24-E. Trait horizontal

Un trait horizontal se trace grâce à \rule[⟨profondeur⟩]{⟨longueur⟩}{⟨épaisseur ⟩}, où ⟨profondeur⟩ correspond à l'écart entre le trait et le bas de la ligne de texte.

On peut aussi utiliser les commandes \hrulefill et \dotfill qui permettent de tracer respectivement des lignes et des points, en « comprimant » le texte qui suit, c'est-à-dire en étirant au maximum la longueur de la ligne ou de la suite de points. On dispose également de la commande \hfill qui permet de comprimer le texte qui suit en le faisant précéder d'espaces.

Exemple :

 
Sélectionnez
1.
2.
3.
4.
5.
\hfill Du texte comprimé.

\hrulefill Du texte comprimé.

\dotfill Du texte comprimé.
Image non disponible

Pour des traits plus complexes, par exemple en diagonale ou en pointillés, on se reportera au package eepic(198) ou, selon le cas, à TikZ(199).

25. Chapitre 25 - Formater son index

La mise en forme par défaut de l'index n'est pas très satisfaisante. On peut heureusement la modifier pour rendre l'index plus lisible.

25-A. Comment faire

Les commandes pour formater l'index sont à placer dans un fichier monstyle.ist que vous devez créer vous-même.

Pensez à placer ce fichier à un endroit où LaTeX peut le trouver, par exemple à côté du fichier principal.

Sans le package imakedix, il fallait compiler en ligne de commande (☞ Annexe CAnnexe C - Introduction à la ligne de commande), selon cette syntaxe :

 
Sélectionnez
makeindex -s monstyle.ist monfichier.idx

Il faut encore procéder ainsi lorsque vous passez l'option noautomatic à la commande \makeindex pour un index particulier, par exemple pour celui des sources primaires (☞ Modifications des macros de biblatexModifications des macros de biblatex).

L'option -s indiquait à Makeindex qu'il devait utiliser le fichier de style monstyle.ist.

En revanche, si vous ne passez pas l'option noautomatic à \makindex, il vous faut passer l'option options=-s monstyle.ist à la commande \makeindex :

 
Sélectionnez
\makeindex[options=-s monstyle.ist]

25-B. Quelques commandes

Nous allons donner ici quelques exemples de commandes qu'il est possible de mettre dans son fichier monstyle.ist.

Dans le fichier de styles .ist, on n'écrit pas en LaTeX mais en TeX. Les commandes sont ainsi encadrées par des guillemets anglais ". La barre contre-oblique, quant à elle, n'est prise en compte que si elle est précédée d'une autre contre-oblique.

Le manuel de la commande MakeIndex(200) nous indique que, pour modifier ce qui est inséré entre le premier niveau d'item (l'entrée) - ou niveau 0 - et le ou les numéros de page, on utilise l'option delim_0 ; de même, pour définir ce qui est inséré entre le deuxième niveau d'item (la sous-entrée) - ou niveau 1, et les numéros, on utilise l'option delim_1, et l'option delim_2 pour les sous-sous-entrées - ou niveau 2 d'itemisation. Le choix par défaut est une virgule suivie d'un blanc : ", "

Ainsi, si nous désirons que le numéro de la page soit justifié à droite, et non simplement séparé de l'entrée par une virgule et un blanc, nous devons utiliser la commande \hfill(☞ Trait horizontalTrait horizontal) que nous indiquons dans notre fichier de style par les lignes suivantes :

 
Sélectionnez
1.
2.
3.
delim_0 "\\hfill "
delim_1 "\\hfill "
delim_2 "\\hfill "

Nous obtenons donc :

Image non disponible

Si nous préférons une ligne de points, il faut remplacer "\\hfill par \\dotfill.

Les espaces situées entre les commandes et les deuxièmes guillemets fermants sont indispensables. En effet, en l'absence de ces espaces, MakeIndex accole, dans le fichier .ind généré, les commandes aux numéros de page, ce qui bloque alors la compilation, puisque LaTeX se retrouve alors face à des commandes inconnues, du style \hfill1.

Si l'on continue la lecture du manuel, on apprend aussi comment faire apparaître « sq. », ou ce que l'on veut, quand une même entrée est indexée dans trois pages ou plus à la suite. Il suffit d'indiquer suffix_3p "~sq."

Voyons maintenant comment l'on peut insérer les lettres de l'alphabet entre les groupes d'entrées. Cette manipulation permet de rendre plus lisible un index un peu long.

Le manuel indique que l'option par défaut headings_flag 0 ne met pas de séparateurs entre les groupes, que l'option headings_flag 1 permet d'obtenir des lettres majuscules comme séparateur, et l'option headings_flag -1 des lettres minuscules.

Définissons ensuite la manière dont vont apparaître ces lettres. On utilise la commande heading_prefix. Supposons que nous voulions faire apparaître ces lettres séparatrices en gras. N'oublions pas que l'on code en TeX... Nous écrivons donc :

 
Sélectionnez
heading_prefix "{\\bfseries "

Si nous voulons qu'elles apparaissent en italique, nous écrivons \\itshape (on utilise \bfseries et \itshape, qui sont des commandes TeX, et non \textbf \textit).

Nous pouvons de même changer la taille des lettres séparatrices en ajoutant \\large ou \\Large, et ainsi de suite. (☞ Taille des caractèresTaille des caractères)

Mais nous avons ouvert une accolade... il nous faut la refermer :

 
Sélectionnez
heading_suffix " }\\nopagebreak\n "

\\nopagebreak évite qu'une lettre séparatrice se retrouve seule en fin de page. Le \n est une petite coquetterie pour permettre d'avoir, dans notre fichier .ind, un retour à la ligne après \nopagebreak.

Ce n'est pas fini. Nos lettres sont actuellement justifiées à gauche, comme les entrées de l'index. Nous voudrions qu'elles soient centrées :

 
Sélectionnez
1.
2.
3.
headings_flag 1
heading_prefix " {\\bfseries\\large\\hfill "
heading_suffix " \\hfill}\\nopagebreak\n "

Les deux \\hfill étirent, pour le premier, l'espace avant la lettre vers la droite, et pour le second l'espace suivant la lettre vers la gauche - voilà nos lettres centrées.

Image non disponible

Si nous préférons qu'elles soient simplement légèrement décalées vers la droite, nous pouvons utiliser, à la place de \\hfill, \\hspace*{1em} qui rajoute à gauche un espace d'un cadratin (☞ Annexe EAnnexe E - Unités de mesure en LaTeX ; ☞ EspacementsEspacements).

Quand on a compris ce système, il est alors assez simple de formater à sa guise l'index. C'est pourquoi, pour les autres options, nous renvoyons ici à la lecture du manuel(201).

Voici tout de même, à titre indicatif, le fichier final :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
headings_flag 1
suffix_3p "~sq."
heading_prefix " {\\bfseries\\large\\hfill "
heading_suffix " \\hfill}\\nopagebreak\n "
delim_0 "\\hfill "
delim_1 "\\hfill "
delim_2 "\\hfill "

précédentsommairesuivant
Nous tenons cette information du manuel de Franck MITTELBACH et Michel GOOSSENS, LaTeX Companion, 2e éd., Paris : Pearson, 2006, URL : http://www.pearson.fr/livre/?GCOI=27440100048330, p. 222, qui ne précise pas comment faire.
Will ROBERTSON et Khaled HOSNY, The fontspec package.
Nous n'utilisons cette police que pour la version informatique. Pour la version papier, nous avons confié la création de la couverture à Laura Pigeon, qui a fait son propre choix de police.
Will ROBERTSON et Khaled HOSNY, « Font independent options », dans : The fontspec package.
Will ROBERTSON et Khaled HOSNY, « New commands to select font families », dans : The fontspec package.
Nous nous sommes basés sur la classe bredele : Christophe MASUTTI, Bredele : Un modèle pour une thèse en LaTeX, URL : http://linuxetleschoses.tuxfamily.org/Logiciels/bredele.php.
Bien que « old » soit un terme anglais, nous l'utilisons, car il est de convention de préfixer ainsi les commandes copiées depuis une autre commande.
Lignes 287-288, à la date où nous écrivons.
Ligne 414 à la date du 19 septembre 2011.
Lignes 360 et suivantes, à la date du 6 août 2011.
Ligne 386, à la date du 19 septembre 2011.
Nous nous inspirons ici du style de la classe bredele MASUTTI, Bredele, op. cit.
Ligne 718, à la date du 24 août 2011
En particulier Vincent LOZANO, Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander, In Libro Veritas, 2008, URL : http://framabook.org/tag/latex/ ; Franck MITTELBACH et Michel GOOSSENS, The LaTeX Graphics Companion, Boston : Addison Wesley, 2007.
Hideo UMEKI, The geometry package.
Ligne 486, au 19 septembre 2011.
On peut également consulter, si on aime les défis de codage en TeX/LaTeX, Vincent LOZANO, « Boîtes », dans : Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander, In Libro Veritas, 2008, p. 73-82, URL : http://framabook.org/tag/latex/.
Conrad KWOK, EEPIC Extensions to epic and LaTeX Picture Environment Version 1.1.
TANTAU, Tikz & PGF, op.Annexe C cit.
Que l'on peut lire en frappant dans le terminal (Annexe CAnnexe C - Introduction à la ligne de commande) man makeindex et que l'on peut quitter en frappant la lettre q, ou, si l'on utilise Windows, que l'on peut consulter à cette adresse http://www.fiveanddime.net/man-pages/makeindex.1.html.
On pourra aussi consulter Vincent LOZANO, « Allure de l'index », dans : Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander, In Libro Veritas, 2008, p. 168-170, URL : http://framabook.org/tag/latex/.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Licence Creative Commons : Attribution - Partage dans les Mêmes Conditions 3.0 France (CC BY-SA 3.0 FR). Par contre, les logos Developpez.com, en-tête, pied de page, css, et look et feel de l'article sont Copyright © 2013 Developpez.com.