[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ suivant ]


Présentation rapide de LaTeX2e
Chapitre 6 - Présentation du langage


Il serait aussi illusoire qu'inutile de présenter ici en détail toutes les commandes et tous les environnements mis à disposition par LaTeX car ceci fait l'objet de plusieurs livres si l'on compte les packages et de nombreux documents disponibles sur Internet (voir Où trouver de la documentation ?, Chapitre 9). Je me contenterai donc ici (d'essayer) de citer les principales structures offertes par LaTeX sans les décrire en détail. Il n'est pas exclu que certaines d'entre elles, pour des raisons de temps, n'aient même pas pu être présentées lors de la formation. Vous êtes prévenus ! ;-)


6.1 Espaces et sauts de lignes dans le fichier source

La gestion des espaces par TeX (et donc LaTeX) est assez particulière, mais très souple. C'est grâce à elle qu'on peut rendre son fichier source lisible sans rajouter des sauts de lignes non désirés partout dans le document.

Il y a quelques rares exceptions à ces règles, comme les environnement de type verbatim qui permettent de copier-coller par exemple le code d'un programme sans que TeX viennent interpréter les caractères spéciaux (pour TeX) qui s'y trouvent et changer la mise en forme avec sa gestion particulière des espaces.

Il est important de noter que des espaces de début de ligne sont toujours agglomérés (selon le mécanisme décrit ci-dessus) avec le saut de ligne qui les précède et n'ont donc aucun effet, ce qui permet d'indenter le fichier source à souhait pour en accroître la lisibilité.

Ce n'est pas parce que plusieurs espaces consécutifs sont traités comme un seul qu'on ne peut obtenir plusieurs espaces de suite dans le document final. La commande \ (antislash suivi d'un espace) produit un ordinary interword space, des commandes comme \hspace ou \hspace* permettent d'insérer des espaces de taille quelconque, éventuellement élastiques (fonctionnent comme des ressorts dont on spécifie la raideur. Plusieurs espaces élastiques dans une même ligne — cela étant aussi valable pour les espaces verticaux — entreront en « concurrence », comme des ressorts)...

Nous désignerons par la suite par « espace » un espace logique et préciserons « espace physique » quand il s'agira d'un vrai espace dans le fichier.


6.2 Commentaires

Un commentaire est introduit par un caractère pourcent (%). Toute la ligne à partir d'un caractère % (inclus), le saut de ligne la terminant ainsi que tous les espaces physiques au début de la ligne suivante sont ignorés. Ceci permet d'écrire du code commenté et indenté sans introduire d'espaces parasites dans le document :

      \supercommande % Eh ouais, elle fait plein de trucs
      \autresupercommande % L'indentation avant \autresupercommande
                          % n'introduit pas d'espace dans le document.

Encore une fois, il peut sembler bizarre à première vue que le saut de ligne terminant une ligne de commentaire et les espaces physiques du début de la ligne suivante soient ignorés, mais ceci s'avère très utile pour terminer une ligne du fichier source sans introduire d'espace parasite dans le document, comme dans l'exemple suivant :

     Blablabla \commande{avec des}{arguments}% Super commentaire très utile
               suite du texte, collé au résultat produit par la commande dans le
               document résultant.

L'indentation de cet exemple est certes douteuse, elle est juste là pour montrer ce que l'on peut faire et qui, souvent, s'avère très pratique.


6.3 Caractères spéciaux

Les caractères #, $, %, &, ~, _, ^, \, { et } sont des caractères spéciaux. Pour les faire apparaître dans le document, on peut soit les mettre dans un environnement robuste vis-à-vis des caractères spéciaux (comme verbatim), soit utiliser les commandes \#, \$, \%, \&, \tilde{ }, \_, \^{ }, \backslash, \{ et \} (entre autres méthodes pour certains).


6.4 Ponctuation

Si la langue active (anglais par défaut ou langue sélectionnée avec le package babel) à un endroit du fichier source est la langue souhaitée, il suffit en général (c'est le cas du français) d'entrer le texte en respectant les conventions typographiques en usage dans cette langue, entre autres (en français) :

On doit mettre un espace (ou plutôt une espace pour les puristes) :

Ces quelques conseils sont tirés de la documentation du package french de Bernard Gaulle (package qui est devenu e-french aujourd'hui, suite au décès de son auteur originel). Pour plus d'informations là-dessus, on recommande souvent le Lexique des règles typographiques en usage à l'Imprimerie Nationale.

LaTeX se chargera de rendre insécables les espaces qu'il faut si cela est respecté (avant les deux-points, les points d'interrogation et d'exclamation, etc.).

On peut indiquer explicitement un espace insécable avec un ~.

L'espace après le point terminant une phrase peut être assez important (notamment en anglais). TeX suppose qu'un point termine une phrase dans tous les cas sauf s'il suit une majuscule (ainsi, le point de Donald E. Knuth est bien compris comme ne terminant pas une phrase). Si l'on a un point qui termine une phrase et qui suit une majuscule, il faut le préciser ainsi :

     Les romains écrivaient I + I = II\@. Vraiment !

Ce genre de situation est assez rare, donc pas la peine de trop se préoccuper de ces règles, sachant qu'il y en a d'autres, par exemple pour bien gérer la suite d'un point terminant une phrase et d'un guillemet anglais fermant (double quote ; pas d'espace entre le point et le guillemet)...


6.5 Forcer des sauts de lignes

Nous avons déjà vu que plusieurs lignes blanches successives dans le source marquent un saut de paragraphe. Cela peut produire, selon la valeur de la longueur \parindent (voir Les longueurs, Section 6.21), un alinea[22] au début du nouveau paragraphe. Un saut de paragraphe se manifeste aussi par l'insertion d'un espace vertical de longueur \parskip (en général élastique mais de longueur naturelle nulle) entre les deux paragraphes.

La commande \\ introduit un saut de ligne à l'intérieur d'un paragraphe. Sa forme étoilée, la commande \\*, fait la même chose mais empêche LaTeX de commencer une nouvelle page à l'endroit de la coupure. Ces deux commandes admettent un argument optionnel spécifiant un espace vertical à rajouter après le saut de ligne. Exemples :

     Emacs est bon pour vous...\\[3mm]%
           % saute une ligne et 3 millimètres
     Vos paupières sont lourdes...\\[0.1\baselineskip]%
           % saute une ligne et 1/10 d'interligne
     Vous utilisez déjà Emacs...

D'autres commandes, utilisées plus rarement, permettent de sauter une ligne, par exemple \linebreak qui coupe la ligne à l'endroit où elle apparaît dans le fichier source. À la différence de \\, la ligne coupée est quand même justifiée par LaTeX si le paragraphe est justifié, ce qui peut provoquer des espaces horizontaux importants (Wordiens) entre les mots, puisqu'on force la main à LaTeX.


6.6 Utiliser des commandes

Le fait de pouvoir définir et utiliser des commandes[23] est un atout majeur de LaTeX par rapport aux programmes de traitement de texte WYSIWYG. Par exemple, on peut de manière extrêmement simple définir une commande \defin pour indiquer les nouveaux mots définis dans un document avec un simple \defin{mot nouveau} dans le texte. L'intérêt d'une telle commande est qu'elle permet sans aucun effort de changer n'importe quand la présentation de tous les mots ainsi définis (gras, italique, etc.), de les rajouter automatiquement à un index, etc.

Utiliser LaTeX intelligemment implique de définir une commande pour chaque construction répétitive.

On peut multiplier les exemples à l'infini. Très simplement, si vous faites un compte-rendu de Travaux Pratiques, vous voudrez probablement définir une commande dans le préambule du document par :

     \usepackage{xspace} % Package pour gérer intelligemment l'espace après le
                         % nom des commandes du type abréviation
     ...
     \newcommand{\tp}{TP\xspace}
     ...
     Dans ce \tp, nous avons...
     Ce \tp était très intéressant pipo pipo pipo pipo...

Ainsi, vous vous réservez la liberté de pouvoir plus tard changer tous les TP résultant en T.P. ou ce que vous voulez (police de forme small caps, i.e. petites capitales, etc.).

Il est très simple d'utiliser une commande déjà définie :

     \commandesansargument bla bla qui n'a rien à voir
     \autrecommandesansargument{} idem
     \commandeavecnarguments{arg1}{arg2}...{argn}autre blabla qui n'a rien à voir
     \commandeavecunargumentoptionnel[lui-même]{et}{les}{autres}{arguments}

On peut même, pour aérer ou passer à la ligne si les arguments sont longs, mettre un espace (logique) entre deux arguments d'une commande, il sera ignoré.

C'est simple, mais il faut garder une règle essentielle à l'esprit :

Donc dans la première ligne de l'exemple ci-dessus, « bla bla » est accolé au résultat de \commandesansargument (ou de ce qui la précède si elle ne produit pas de résultat dans le document final...) et il en est de même pour la troisième ligne alors que dans la deuxième ligne, un espace est inséré entre le résultat de la commande et « autre blabla ».

Pour insérer simplement un espace après l'appel d'une commande sans argument dont le nom n'est constitué que de lettres, il y a donc deux méthodes très classiques :

     C'est en \TeX{} que \LaTeX\ est écrit.

(les deux commandes ci-dessus produisent les vrais « logos » de TeX et LaTeX, c'est la bonne manière d'écrire le nom de ces programmes quand le format du document le permet). Pour écrire un œuf, je recommande soit d'utiliser un codage tel qu'UTF-8, soit ceci :

     Un \oe uf à la coque.

Je déconseille la variante \oe{}f car elle empêche une éventuelle ligature ou un crénage entre le « e dans l'o » et le « u » (je ne dis pas qu'une telle ligature est courante, mais par principe et pour les autres cas pouvant se poser avec d'autres mots, mieux vaut utiliser cette méthode).

L'utilisation ci-dessus dans l'exemple de \tp de la commande \xspace définie par le package xspace permet de s'affranchir de ces règles quand une commande ne sert qu'à insérer du texte au milieu du texte. Elle insère les espaces quand il faut, selon que \tp est suivi d'un signe de ponctuation ou non, etc.

Une commande peut admettre plusieurs arguments optionnels, pas forcément situés avant les arguments obligatoires ; se reporter à la syntaxe de chaque commande dans le doute.


6.7 Utiliser des environnements — notion de groupe

Les environnements apportent une fonctionnalité similaire mais complémentaire de celle des commandes. Par exemple, l'environnement enumerate permet de faire une liste (automatiquement) numérotée comme ceci :

  • élément bla

  • autre élément

  • etc.

  • avec le code suivant :

         \begin{enumerate}
         \item élément bla
         \item autre élément
         \item etc.
         \end{enumerate}
    

    Beaucoup de constructions sont locales à un environnement. Ici, la commande \item est définie par l'environnement enumerate. De même toutes les déclarations ont un effet qui prend fin à la fin du groupe courant. Au fait, qu'est-ce qu'une déclaration ? C'est une commande dont l'effet est limité au groupe courant, un groupe étant délimité entre autres par des accolades { et } ou par le \begin{...} et le \end{...} d'un environnement.

    Certaines commandes qui changent la mise en forme des caractères sont des déclarations. Ainsi, on pourra écrire :

         Du texte « normal » suivi {\itshape de texte en italique} lui-même suivi de
         texte normal.
         \begin{center}
         Ligne centrée\\
         \itshape Autre ligne centrée\\
         \end{center}
    

    On dit que les { et } et les environnements limitent le scope (la portée) des déclarations.

    Un environnement peut admettre un ou plusieurs arguements, introduits de cette manière :

         \begin{envir}[argument optionnel]{arg1}{arg2}...{argn}
         ...
         \end{envir}
    

    6.8 Structure d'un document

    LaTeX définit ce que son auteur originel Leslie Lamport appelle des sectioning commands pour décrire la structure d'un document, dans l'ordre hiérarchique descendant : \part, \chapter, \section, \subsection, \subsubsection, \paragraph et \subparagraph. Par exemple :

         Intro bla bla...
         
         \section{Quelques charmants insectes}
         
         \subsection{La drosophile}
         
         Très fréquente sous les latitudes...
         
         \appendix
         
         \section{La première annexe, qui sera numérotée A par défaut}
         
         ...
         
         \section{La deuxième annexe}
         
         ...
    

    La classe de document article ne permet pas de mettre des \chapter (pour faciliter l'inclusion d'articles comme chapitres d'un report). Si le nombre de niveaux hiérarchiques définis par LaTeX comme ci-dessus s'avérait insuffisant, ce qui est peu probable, on peut toujours définir soi-même des sectioning commands de niveau plus faible...

    Comme vu précédemment, \appendix permet de commencer les annexes d'un document.

    Selon la classe de document utilisée (et la « customisation » opérée par le LaTeXiste), les titres de section ou chapitre ou ... peuvent être reportés ou non dans les en-têtes... et être trop longs pour y tenir. Utiliser dans ce case la syntaxe :

         \section[Titre court]{Titre long}
    

    Titre court sera également utilisé pour l'entrée de cette section dans la table des matières, si on en demande une.

    Il faut savoir que certaines commandes sont dites fragiles et qu'elles peuvent provoquer des erreurs si elles sont utilisées dans des moving arguments de certaines autres commandes, typiquement ceux des commandes de sectionnement. On peut souvent remédier à ce problème en précédent la commande fragile d'un \protect. Se reporter à la documentation de référence pour plus d'informations.


    6.9 Insérer des notes de bas de page

    C'est extrêmement simple et du plus bel effet avec LaTeX :

         du texte\footnote{Texte de la note} du texte du texte du texte...
    

    Attention cependant à ne pas en abuser : trop fréquentes, les notes de bas de page font perdre le fil du texte et rendent la lecture assez pénible.


    6.10 Mettre du texte en valeur

    On peut agir sur la forme des caractères dans un premier temps. La commande \emph{texte à mettre en valeur} est chaudement recommandée pour ce faire : utilisée au sein d'un texte « normal », c'est-à-dire de shape dite upright, i.e. pas italique, elle met son argument en italique ; utilisée au sein de texte en italique, elle met son argument en shape upright.

    On peut aussi agir à un niveau plus gobal, comme avec l'environnement quote, qui met le texte qu'il contient en retrait :

         Texte normal...
         \begin{quote}
            Texte en retrait...
            Lalalère, ce n'est pas à cause des espaces de début de ligne du
            fichier source !
         \end{quote}
         Texte normal...
    

    De manière similaire, LaTeX définit un environnement verse pour écrire de la poésie...

         Texte normal...
         \begin{verse}
            Vers 1\\
            Tu sais, Florent, c'est très poétique, ce que tu écris et puis si le vers
                     est très long, l'environnement gère ça bien.
         
            Vers 1, strophe 2\\
            etc.
         \end{verse}
         Texte normal...
    

    6.11 Centrer, aligner à gauche, aligner à droite

    La manière la plus immédiate pour centrer du texte consiste à utiliser l'environnement center :

         \begin{center}
         Ces trois lignes\\
         sont centrées\\
         horizontalement.
         \end{center}
    

    On peut aussi utiliser la déclaration \centering.

    Pour écrire un paragraphe aligné à gauche et non justifié, on utilisera l'environnement flushleft (même syntaxe que pour center) et pour du texte aligné à droite, ce sera bien-sûr l'environnement flushright. Ces deux environnements ont aussi droit à leurs déclarations correspondantes, à savoir \raggedright pour flushleft et \raggedleft pour flushright.


    6.12 Environnements de type énumération

    LaTeX offre plusieurs possibilités extrêmement pratiques (les mise en page, numérotation éventuelle, etc. étant automatiques) pour faire des énumérations :

         \begin{itemize}
         \item ceci est le premier élément d'une liste non numérotée
         \item les conventions typographiques américaines veulent que les éléments
               soient précédés d'un point noir (comme Word par défaut)
         \item en France, on préfère souvent les tirets et les packages de francisation
               permettent de faire ça automatiquement et puis de toute façon, on peut
               toujours mettre ce qu'on veut à la place !
         \end{itemize}
    

    produira :

    tandis que :

         \begin{enumerate}
         \item consultant
         \item WAP
         \item nouvelle économie
         \end{inumerate}
    

    produira :

  • consultant

  • WAP

  • nouvelle économie

  • et enfin :

         \begin{description}
         \item[gnat] A small animal, found in the North Woods, that causes no end of
                     trouble.
         \item[gnu]  A large animal, found in crossword puzzles, that causes no end of
                     trouble.
         \item[armadillo]
                     A medium-sized animal, named after a medium-sized Texas city.
         \end{description}
    

    produira :

    gnat

    A small animal, found in the North Woods, that causes no end of trouble.

    gnu

    A large animal, found in crossword puzzles, that causes no end of trouble.

    armadillo

    A medium-sized animal, named after a medium-sized Texas city.

    (avec les tags — ici, gnat, gnu et armadillo — mis en valeur par du gras par défaut)


    6.13 Agir sur la mise en forme du texte

    Je vais présenter ici des commandes agissant directement sur cette mise en forme, ce n'est pas une raison pour oublier \emph (voir Mettre du texte en valeur, Section 6.10) !

    LaTeX distingue trois dimensions pour caractériser la forme des caractères : la shape (droit, italique, penché — ce qui est différent de l'italique — et petites capitales), la series (medium ou gras) et la family (roman, sans sérif, télétype — typewriter en anglais, police à châsse fixe type machine à écrire --).

    Toutes ces caractéristiques sont accessibles par l'intermédiaire de commandes (ex. \textbf{texte en gras} ou de déclarations (ex. {\bfseries texte en gras}). Voici une liste de ces commandes, dans l'ordre commande, déclaration :

    Pour changer la taille de la fonte courante, on est encouragé à utiliser les déclarations suivantes car les tailles correspondantes ont été choisies par d'éminents typographes pour « bien aller » ensemble : \tiny \scriptsize \footnotesize \small \normalsize \large \Large \LARGE \huge et \Huge.

    On peut utiliser des tailles ou des fontes différentes, de beaucoup de manières, mais plus cette manière est brutale par rapport à LaTeX, moins on a de chances que les indices ou les interlignes soient corrects. Manière pas très brutale mais quand même un peu :

         \fontsize{60}{72pt}\usefont{T1}{ptm}{m}{sc}%
         Texte en police de taille 60 points, interligne 72 points, encodage T1,
         famille ptm (Times), series medium et shape small caps.\normalsize\normalfont
         Texte en fonte normale pour le document
    

    Cette manière de procéder ne permet pas toujours de choisir chaque paramètre de la fonte comme on le croirait au vu des arguments : le fichier d'extension fd (ici t1ptm.fd, situé dans /usr/share/texmf/tex/latex/psnfss/ sur un système Debian GNU/Linux potato, et dans un répertoire analogue à partir de texmf sur toute bonne distribution de TeX car la structure des répertoires, appelée TDS pour TeX Directory Structure, est normalisée) pour cette famille et dans cet encodage précise des substitutions dans les cas non prévus par ce fichier. Ainsi, certains fichiers fd autorisent n'importe quelle taille de caractères tandis que d'autres n'en autorisent qu'un nombre fini et opèrent automatiquement des substitutions le cas échéant. Ce fichier peut également prévoir des substitutions pour les combinaisons de famille, series et shape non prévues par le dessinateur de la fonte. On peut écrire soi-même des fichiers fd si on le souhaite pour pallier ces problèmes mais la méthode ci-dessous suffit en général et est beaucoup plus simple.

    La manière la plus brutale de procéder, mais qui permet de toujours obtenir le résultat escompté, consiste à faire le changement de police selon la méthode TeX :

         \font\mafonteamoi=ecbx12 at 40pt\mafonteamoi Texte dans la fonte que je veux%
         \normalfont
         Texte dans la fonte normale du document.
    

    Le mécanisme de gestion des fontes par TeX, LaTeX et tous les programmes qui gravitent autour est assez complexe, ceci étant probablement dû à l'ancienneté de TeX et à la grande diversité des types de fontes qui peuvent être d'utilisés dans ce contexte (METAFONT, PostScript, TrueType, OpenType...). Pour plus d'informations à ce sujet, notamment comment trouver le nom ecbx12 ci-dessus correspondant à ses desiderata, on se reportera au remarquable document de Vincent Zoonekynd disponible à http://zoonek.free.fr/LaTeX/Fontes/fontes.html. En anglais, on pourra lire dans toute distribution TeX qui se respecte les documents fontname et fntguide, généralement au format DVI ou PDF. Parmi les livres imprimés, le LaTeX Companion (voir Où trouver de la documentation ?, Chapitre 9) peut aussi être très utile pour aider à comprendre ce sujet délicat.

    Avec un mécanisme très brutal comme dans le dernier exemple, LaTeX n'a aucun moyen de savoir si la fonte spécifiée est italique ou non, donc il ne faut pas espérer pouvoir utiliser à bon escient des commandes comme \emph dans du texte écrit dans \mafonteamoi.


    6.14 Formules mathématiques

    On peut commencer une formule mathématique dans du texte en la mettant entre deux $ :

         Nous avons vu que $\sum_{i=1}^{n} x_{i} = \int_{0}^{1} f(x) dx$ et que...
         Mais beaucoup plus important :
           \[ \sum_{i=1}^n x_i = \int_0^1 f(x) dx \]
    

    La deuxième méthode, comme indiquée ci-dessus, produit une formule qui se détache du texte (espace vertical, centrage horizontal ou décalage donné par rapport à la marge gauche si on utilise l'option fleqn de \documentclass avec \documentclass[...,fleqn,...]{article ou book ou...}). Elle montre aussi que dans certains cas, on peut se passer des accolades...

    Sauf customization particulière, les formules en ligne (première méthode, inline formulas selon le terme consacré) peuvent être coupées, ce qui est souvent décevant. Pour une formule particulière, ${z = 3}$ évitera la coupure. Pour une gestion plus automatique, il faudra jouer avec \binoppenalty et \relpenalty.

    Les formules en ligne ne sont pas affichées de la même façon que les display formulas. En particulier, les indices des sommes et des intégrales sont placés sur les côtés du symbole en question pour ne pas avoir à augmenter l'interligne en plein milieu d'un paragraphe. On peut utiliser \displaystyle dans une formule en ligne pour avoir le même affichage que si la formule était introduite par \[ et \] mais on bousille son interligne, bien entendu.

    Il est hors de question de s'étendre plus sur les formules ici car il y aurait beaucoup trop à dire. Voir Où trouver de la documentation ?, Chapitre 9 pour plus d'informations.


    6.15 Définir ses propres commandes et environnements

    LaTeX offre une interface simple mais un peu limitée pour définir des commandes. Pour définir des commandes à la syntaxe compliquée ou récursives, il faudra programmer directement en TeX. Voici rapidement l'interface offerte par LaTeX.

         % Définition de commande sans argument :
         \newcommand{\macommande}{ce qu'elle fait}
         %
         % Commande avec deux arguments, utilisés avec #1 et #2 :
         \newcommand{\bla}[2]{\textbf{#1} et \textit{#2} si ça me fait plaisir !}
         %
         % Commande avec n arguments (n <= 9) dont le premier est optionnel de valeur
         % par défaut « argopt » :
         \newcommand{\foo}[n][argopt]{Définition de la commande, les arguments sont
         #1, #2, ... #n}
    

    Pour redéfinir une commande existant déjà, on utilisera \renewcommand (même syntaxe que \newcommand) et pour définir une commande sauf si elle existe déjà, auquel cas on garde la définition en place, on utilisera \providecommand.

    LaTeX fournit des commandes très similaires pour définir des environnements : \newenvironment et \renewenvironment dont la syntaxe est quasiment identique à \newcommand :

         \newenvironment  {nom}[nb d'arguments][argument optionnel]{begdef}{enddef}
         \renewenvironment{nom}[nb d'arguments][argument optionnel]{begdef}{enddef}
    

    begdef et enddef seront insérés respectivement avant et après le contenu (entre \begin{nom} et \end{nom}) de l'environnement.


    6.16 Structures de type tableau


    6.16.1 Environnements tabular et array

    Pour faire un tableau, on peut utiliser un environnement tabular, par exemple avec :

         \begin{tabular}{|c|c|c|}
           \hline
           Numéro & Rôle                                         & Abréviation\\\hline
           1      & Moteur Gauche                                & MG\\
           2      & Moteurs Gauche et Droit                      & MG+MD\\
           3      & Moteur Droit                                 & MD\\
           4      & Balises terrain + capteurs de lignes         & \\
           5      & Gestion des balles + balise sur l'adversaire & \\
           7      & Carte PC104                                  & \\\hline
         \end{tabular}
    

    Je donne cet exemple car c'est le b.a.-ba des tableaux avec LaTeX, et comprendre ce genre de chose est nécessaire pour aborder la plupart, sinon toutes les documentations de packages gravitant autour des tableaux. Mais je dois signaler d'emblée qu'il s'agit d'un mauvais exemple sur le plan typographique. En effet, comme le montre très bien Simon Fear dans la documentation du package booktabs, les lignes verticales sont presque toujours à proscrire dans un tableau. Elles ne servent à rien car les colonnes se distinguent d'elles-mêmes par le simple alignement de leur contenu dans chaque ligne, elles alourdissent donc inutilement le tableau. On peut facilement supprimer les lignes verticales en commençant le tableau avec \begin{tabular}{ccc} au lieu de \begin{tabular}{|c|c|c|}, mais si l'on veut faire encore mieux, il faut aussi jouer sur les épaisseurs des lignes horizontales et éventuellement l'espacement entre les lignes ; c'est là que les packages booktabs et son copain ctable s'avèrent utile.

    Bref, mon conseil est le suivant : familiarisez-vous un peu avec les tableaux de base LaTeX décrits très brièvement ici, gardez en tête que le package array les améliore tout en supportant une syntaxe quasi identique, mais si vous voulez faire des tableaux sobres et efficaces pour communiquer des idées à votre lectorat plus que pour faire joujou avec LaTeX, alors foncez sur la documentation du package booktabs. L'exemple donné dès les premières pages est très éclairant, je trouve. Une fois que vous aurez compris comment se servir de booktabs, vous pourrez également consulter la documentation du package ctable. Ce package s'appuie sur booktabs et permet de gérer de manière unifiée l'intégration à un environnement table[25], l'ajout et le placement d'une légende pour un tableau donné, ainsi que celui de notes de bas de « page » dont le texte se retrouve en réalité sous le tableau plutôt qu'au bas de la page.

    Enfin, afin d'éviter tout malentendu, une distinction s'impose : il ne faut pas confondre l'environnement array avec le package array. LaTeX offre un environnement array qui est très similaire à l'environnement tabular, et est utilisé en mode mathématique pour écrire des matrices. On l'invoque typiquement avec une syntaxe identique à tabular, au nom de l'environnement près :

         \begin{array}{...}
           ...
         \end{array}
    

    La différence, c'est que pour l'environnement array, il faut faire cela au sein d'une formule mathématique (c'est sa particularité notoire par rapport à l'environnement tabular), par exemple entre \[ et \]. Il ne faut donc pas confondre cet environnement array avec le package array, qui fournit une version améliorée des environnements tabular et array présents dans LaTeX2e. Autrement dit, le package array, que l'on utilise en écrivant \usepackage{array} dans le préambule du document, redéfinit les environnements tabular et array présents « de base » dans le noyau LaTeX afin de les améliorer.

    Il y a beaucoup à dire sur ces environnements et leurs extensions (packages array, tabularx, booktabs, ctable, cellspace, makecell, multirow, colortbl, longtable, supertabular, tabu...). Voir ci-dessous pour une brève description de ces packages, sur CTAN pour des informations précises sur chacun d'entre eux (utiliser le champ de recherche), ou bien les références indiquées dans Où trouver de la documentation ?, Chapitre 9.

    Avant d'expliquer brièvement comment utiliser les environnements tabular et array, mentionnons encore une chose très importante : chacun de ces environnements (tout comme le copain tabular*, d'ailleurs) produit une boîte au sens du moteur TeX, boîte qui contient la totalité du tableau, quelle que soit sa taille. On peut donc placer cette boîte, récupérer ses dimensions, etc. avec les commandes vues dans Manipulation des boîtes, Section 6.23.

    L'utilisation la plus basique de l'environnement tabular[26] revient à écrire :

         \begin{tabular}{colonnes}
    

    colonnes est une séquence d'éléments spécifiant les différentes colonnes du tableau, parmi lesquels :

    l

    colonne de largeur automatique (fonction de l'élément le plus large que l'on y mettra) et dont le contenu, une seule ligne a priori[27], est aligné à gauche (left) ;

    r

    colonne de largeur automatique (fonction de l'élément le plus large que l'on y mettra), et dont le contenu, une seule ligne a priori, est aligné à droite (right) ;

    c

    colonne de largeur automatique (fonction de l'élément le plus large que l'on y mettra), et dont le contenu, une seule ligne a priori, est centré dans la colonne (center) ;

    p{largeur}

    colonne de largeur largeur dont le contenu est formaté comme un paragraphe, avec retour à la ligne automatique pour que chaque ligne ne dépasse pas la largeur spécifiée ;

    m{largeur}

    nécessite l'utilisation du package array ; c'est équivalent à p{largeur}, à ceci près que le contenu de chaque cellule concernée est centré verticalement au sein de sa ligne respective dans le tableau.

    On peut disposer au sein de ces spécificateurs de colonne des caractères « barre verticale » (|) afin d'indiquer que l'on souhaite qu'une ligne verticale soit tracée sur toute la hauteur du tableau à cet endroit-là (à gauche ou à droite du tableau, ou encore entre deux colonnes).

    Avant, après ou entre les types de colonnes, un @{} supprime l'espace à gauche de la première colonne, entre deux colonnes ou à droite de la dernière.

    Vient ensuite la description des différentes lignes du tableau. Chaque ligne est entrée successivement et terminée par un double antislash (\\). Au sein d'une ligne donnée, les colonnes sont séparées par le caractère &. Les espaces précédant ou suivant immédiatement ce caractère & sont ignorés. Là où l'on souhaite qu'une ligne horizontale soit insérée sur toute la largeur du tableau, il suffit d'écrire \hline. On peut utiliser \hline en début ou en fin de tableau, ou encore entre deux lignes, juste après le \\ terminant la ligne précédente.

    Enfin, on termine son tableau par \end{tabular}, ou bien entendu \end{array} pour un environnement array.

    Remarquons que la commande \\ est localement redéfinie par les environnements tabular et apparentés, tels que tabular* et array, pour permettre à l'utilisateur de terminer une ligne de tableau. Pour terminer une ligne d'une colonne de type p, on peut cependant utiliser \newline[28].

    Il y a également des commandes telles que \centering qui redéfinissent \\, de sorte que le \\ localement mis en place par tabular n'est plus accessible après une telle commande. Dans ce genre de cas, on peut utiliser \tabularnewline pour terminer une ligne du tableau. Ceci est essentiellement utile lorsque \centering ou une commande du même genre (\raggedleft, raggedright...) a été placée dans la déclaration du tableau pour telle ou telle colonne à l'aide de la construction >{decl} (voir la documentation du package array). Autrement, il suffit de limiter la portée de \centering ou similaire en la plaçant dans un groupe :

         {\centering ...}
    

    ou encore d'utiliser un environnement tel que center : quand celui-ci se termine, après \end{center} ou équivalent, les définitions locales à l'environnement laissent place à celles qui étaient actives juste avant l'environnement.

    L'environnement tabular* est identique à tabular, à ceci près qu'il faut lui passer une longueur fixe (par exemple 0.9\linewidth) et qu'il va étirer les espaces inter-colonnes aux endroits où on le lui aura permis, afin que la largeur du tableau soit égale à la longueur passée en argument. Exemple :

         \begin{tabular*}{0.9\linewidth}{|lc@{\extracolsep{\fill}}|r@{\extracolsep{0pt}}l|}
           \hline
           à gauche         & centré        & aligné à droite & à gauche... \\
           \hline
           encore à gauche  & autre centré  & à droite !      & et à gauche  \\
           \hline
         \end{tabular*}
    

    Dans cet exemple, l'espace entre les colonnes 2 et 3 (de types respectifs c et r) peut être étiré à volonté en vertu du @{\extracolsep{\fill}}. Pour les espaces inter-colonnes suivants en revanche, on exige la longueur nulle : @{\extracolsep{0pt}}. Il en résulte que les deux dernières colonnes sont collées l'une à l'autre. @{\extracolsep{...}} s'applique aux colonnes qui le suivent, jusqu'à être éventuellement annulé par un autre @{\extracolsep{...}}. À moins d'avoir demandé l'impossible (p. ex. en raison d'un excès de contenu incompressible), la largeur du tableau dans cet exemple doit faire précisément neuf dixièmes de la longueur d'une ligne de texte à l'endroit où l'environnement tabular* a été inséré (notez que \linewidth peut-être plus court que \textwidth si l'on est dans un passage en mode multi-colonnes).

    Pour finir, mentionnons quelques-uns des nombreux packages LaTeX relatifs aux tableaux :

    array

    Améliore les environnements tabular et array de LaTeX2e.

    tabularx

    Similaire à tabular* sauf que cette fois-ci, au lieu de l'espace entre les colonnes désignées, ce sont les colonnes déclarées de type X qui peuvent se dilater afin de donner au tableau la largeur passée en argument.

    booktabs

    Déjà mentionné ci-dessus. Donne d'excellents conseils pour la typographie des tables ou tableaux, et fournit des commandes pratiques pour mettre en oeuvre ces conseils, notamment pour tracer des lignes horizontales de diverses épaisseurs et pour insérer un peu d'espace entre deux lignes.

    ctable

    Déjà mentionné ci-dessus. S'appuie sur booktabs et permet de gérer de manière unifiée l'intégration à un environnement table, l'ajout et le placement d'une légende pour un tableau donné, ainsi que celui de notes de bas de « page » dont le texte se retrouve en réalité sous le tableau plutôt qu'au bas de la page.

    cellspace

    Le package cellspace est très utile pour s'assurer que les cellules d'une colonne donnée d'un tableau ont un contenu pas trop proche du bord haut ou bas de la cellule (distance minimale réglable pour l'un comme pour l'autre). Il faut préfixer le type de colonne par S comme dans Sl, Sr, Sc, S{p{3cm}}, ou encore S{m{3cm}} avec le package array.

    Lorsque siunitx est également chargé, comme ce dernier utilise le même caractère S pour déclarer des colonnes à alignement sur séparateur décimal, le préfixe S de cellspace devient un C, mais les versions récentes de cellspace permettent de choisir le caractère utilisé comme préfixe, afin d'éviter ce genre de conflit. Il suffit de charger cellspace avec, par exemple, \usepackage[column=O]{cellspace}.

    makecell

    Permet de réaliser diverses choses au niveau de la cellule d'un tableau : cellule contenant plusieurs lignes[29], cellule s'étalant sur plusieurs lignes d'un tableau, en-têtes de colonnes tournés de 90 degrés, cellule divisée en deux selon une diagonale, ajustement de l'espace vertical autour du contenu des cellules...

    multirow

    Permet, comme makecell, de réaliser des cellules qui s'étalent sur plusieurs lignes d'un tableau.

    colortbl

    Permet de colorer (ou serait-ce colorier ? ;-) le contenu et/ou le pourtour de certaines cellules d'un tableau.

    longtable

    Avec longtable, un tableau n'est plus une simple boîte pour TeX. S'il manque de la place sur la page courante, le tableau peut continuer sur autant de pages que nécessaire, avec possibilité d'insertion automatique des en-têtes de colonnes en haut de chaque page.

    supertabular

    Même objectif que longtable mais implémenté de manière différente. Il semblerait que longtable lui soit préférable, sauf dans certains cas mieux gérés par supertabular...

    tabu

    Fournit un environnement tabu très flexible, a priori plus que tabular, tabular*, array et tabularx. Ce package est très puissant et bien documenté, mais je ne suis pas sûr qu'il soit encore maintenu ; à vérifier.


    6.16.2 Environnement tabbing

    Un autre environnement permet de réaliser ce que l'on peut faire avec des taquets de tabulations à gauche : l'environnement tabbing. En résumant, on peut dire que \= définit un taquet de tabulation, \> permet de s'aligner sur le prochain taquet de tabulation[30] et \kill permet d'annuler une ligne pour qu'elle n'apparaisse pas mais que les taquets de tabulation qu'elle a définis servent aux suivantes.

         \begin{tabbing}
         If \= it's raining         \\
            \> then \= put on boots,\\
            \>      \> take hat;    \\
            \> else \> smile.       \\
         Leave house.
         \end{tabbing}
         
         ...
         
         \begin{tabbing}
         Armadillo \= Armament \=       \kill
         Gnat      \> Gnu      \> Gnome \\ % Alignés sur ceux de la ligne précédente
                                           % qui n'est pas affichée (\kill)
         Armadillo \> Armament \> Armorer  % Cette ligne permet de le vérifier
         \end{tabbing}
    

    6.17 Insérer du code d'un autre langage, des caractères spéciaux...

    Plusieurs possiblités : l'environnement verbatim, qui modifie profondément le fonctionnement de TeX quand il regarde l'intérieur de l'environnement (les caractères spéciaux ne sont plus spéciaux, etc.), la commande \verb et leurs dérivés.

         Texte.
         \begin{verbatim}
         #include <stdio.h>
         ...
         \end{verbatim}
         
         Je tape du texte et \verb!mot$@ bizarre! ou \verb,autre$]@[{mot bizarre,.
    

    Le verbatim sort en famille télétype, les mots ne sont pas coupés, etc. C'est brutal. L'argument de \verb est délimité par une paire de caractères à peu près quelconques (qui ne peuvent donc pas se retrouver dans ledit argument).

    L'environnement verbatim* et sa commande duale \verb* sont assez pratiques dans la mesure où ils remplacent les espaces par un symbole visible (et traditionnel pour représenter un espace).

    Certains packages comme le package listings sont particulièrement adaptés à l'insertion de code source dans un document LaTeX.


    6.18 Les flottants

    Un tableau ou un graphique est une grosse boîte pour TeX. Donc il est gênant quand il s'agit de faire la coupure entre deux pages puisque s'il est mal placé, il produira beaucoup de blanc car sera rejeté sur la page suivante. Et ce blanc n'est pas beau.

    Avec Word, on insère son tableau ou son graphique à un endroit adéquat pour que la coupure de page ne soit pas trop laide et on continue son document. Puis on rajoute du texte quelques pages avant le tableau et boum ! Il passe à la page suivante, laissant un affreux vide vertical. Sauf si on relit les 1242 pages suivant le texte que l'on a inséré, bien-sûr.

    Je me rends compte que je suis peut-être un peu mauvaise langue car on peut peut-être s'en sortir avec un placement par rapport à la page en ancrant par rapport à un paragraphe... À voir.

    Avec LaTeX, on a le droit d'insérer son tableau ou son grahique directement dans le texte (il suffit de ne rien faire de particulier), mais on peut aussi le mettre dans un environnement figure qui pourra se ballader un peu autour du point du source où il est inséré en fonction des paramètres spécifiés lors de son utilisation. On peut mettre n'importe quoi dans un environnement figure. Le contenu se ballade éventuellement mais ne subira jamais de coupure de page. Exemple typique d'utilisation (voir Inclure des images, Section 6.24 pour \includegraphics) :

         \begin{figure}[htbp]
           \begin{center}
             \includegraphics{schema}
           \end{center}
           \caption{Écoulement de fluides blablabla...}
           \label{fig-ecoulements}
         \end{figure}
    

    Se reporter à Où trouver de la documentation ?, Chapitre 9 pour comprendre les paramètres conditionnant le placement des figures.

    L'environnement table est très similaire à figure. Les différences principales sont que la légende sera indiquée par quelque chose du genre « Tab. 10 — Quelques données démographiques sur les gnous » plutôt que « Fig. 4 — Écoulement de fluides blablabla... », les numérotations des figures et des tables sont séparées et que l'on peut invoquer deux listes distinctes avec \listoffigures et \listoftables (même mécanisme que \tableofcontents, voir Génération d'une table des matières, Section 6.19.1, mais fichiers d'extension lof et lot au lieu de toc).

    Comme expliqué en Les références croisées, Section 6.19.2, il est possible de faire référence à un numéro de figure, de table, d'équation, de plein de choses qui se signalent par un \label sans taper ce numéro directement, puisqu'il est amené à varier quand le document évolue. On peut aussi accéder de la même manière au numéro de la page où se situe la référence, etc.


    6.19 Références croisées


    6.19.1 Génération d'une table des matières

    La commande \tableofcontents produit une table des matières. Plus précisément :

    Il est important de bien comprendre ce fonctionnement puisqu'il implique que pour avoir une table des matières à jour, il faut en général compiler le document deux fois de suite[31] !

    On peut bien-sûr personnaliser le format de la table des matières ; se reporter à la documentation de référence pour découvrir comment s'y prendre.


    6.19.2 Les références croisées

    LaTeX permet de gérer très facilement les références croisées, alors autant ne pas se priver car elles sont très pratiques pour le lecteur. Quelques structures comme les commandes de sectionnement, les équations, les figures, les tables... permettent de les référencer avec un nom explicite à l'aide d'une commande \label et d'y faire référence par la suite avec la commande \ref ou \pageref ou leurs dérivés définis par le package varioref :

         \section{Les gnous en Amérique du Nord%
         \label{sec-gnus}}
         
         Voilà, ils sont très gentils, etc.
         
         ...
         
         Comme nous l'avons vu à la section~\ref{sec-gnus} page~\pageref{sec-gnus},
         les gnous d'Amérique du Nord...
    

    Il est conseillé de ne pas mettre de : dans l'argument de \label car ce caractère est rendu actif par certains packages de francisation afin de gérer correctement l'espacement avant et après le : en français.

    Notez l'emploi des espaces insécables ci-dessus. Notez aussi qu'on n'aura pas l'air malin si le texte ci-dessus renvoie à la page courante, c'est pourquoi le package varioref vient à la rescousse en fournissant les commandes (entre autres) \vref (qui fait une référence complète, du style « 8 page 19 » ou « 8 page suivante » ou « 8 de la présente page » ou... selon le cas, la manière d'annoncer la chose étant bien-sûr personnalisable) et \vpageref (qui ne fait une référence qu'à la page).

    Dans le cas d'une figure ou d'un table, il est très important de mettre la commande \label (dans l'environnement figure/table bien-sûr) après la commande \caption ou dans son argument.

    Les référence croisées de ce type sont générées avec le même type de mécanisme que la table des matières, donc il faut prévoir plusieurs compilations successives du fichier source pour être certain d'avoir les références correctes.


    6.19.3 Génération d'un index

    LaTeX et le programme MakeIndex permettent de générer un index intelligemment en marquant les mots dans le fichier source au fur et à mesure qu'on les rencontre. La procédure étant un peu plus complexe que pour la table des matières, je ne l'expliquerai pas ici. Voir Où trouver de la documentation ?, Chapitre 9 pour plus d'informations.


    6.20 Les compteurs

    Un compteur est défini par la commande :

         \newcounter{nouveau_compteur}[compteur]
    

    nouveau_compteur est le nom du compteur à définir (suite de lettres formant le nom d'un compteur non déjà défini). L'argument optionnel compteur, s'il est présent, doit être le nom d'un compteur déjà défini. Dans ce cas, nouveau_compteur sera mis à 0 à chaque fois que compteur est modifié par \stepcounter ou \refstepcounter. Ceci est utilisé par exemple pour réinitialiser le compteur de sous-section quand on passe à la section suivante.

    Pour affecter une valeur numérique (entière) à un compteur, on utilise la commande :

         \setcounter{compteur}{valeur}
    

    Pour ajouter une valeur à celle d'un compteur, on fera :

         \addtocounter{compteur}{valeur}
    

    L'argument valeur des deux commandes précédentes peut être une constante numérique ou la valeur d'un compteur, obtenue par :

         \value{compteur}
    

    Pour écrire dans le document la valeur du compteur ctr, on peut utiliser l'une des commandes suivantes :

    Enfin, on dispose de deux commandes pour incrémenter un compteur ctr et mettre à 0 tous les compteurs ctr' qui ont été déclarés par \newcounter{ctr'}[ctr] :

         \stepcounter   {ctr}
         \refstepcounter{ctr}
    

    La différence entre ces deux commandes réside dans le fait que la seconde déclare la valeur courante de \ref comme étant le texte généré par \thectr.

    Il y a de nombreux compteurs prédéfinis par LaTeX : page, part, chapter, section, subsection, subsubsection, paragraph, subparagraph, equation, figure, table, footnote, mpfootnote[32], enumi[33], enumii, enumiii et enumiv, dans les classes standard de LaTeX. On peut changer la présentation de ces informations au moyen de commandes du genre :

         \renewcommand{\thesection}{\Roman{section}}
    

    Pour des changements plus importants (encadrement des numéros de section, par exemple), on se reportera au LaTeX Companion (voir Où trouver de la documentation ?, Chapitre 9).


    6.21 Les longueurs

    Les longueurs (lengths) sont un type de donnée manipulé par TeX pour exprimer des distances. Elles peuvent être fixes ou élastiques (appelées rubber lengths dans ce dernier cas).

    La manipulation des longueurs est similaire à celle des compteurs et peut être faite à l'aide des commandes suivantes :

    \newlength{cmd}

    créer une longueur de nom cmd

    \setlength{cmd}{len}

    affecter à la longueur cmd la valeur de len

    \addtolength{cmd}{len}

    ajouter à la longueur cmd la valeur de len

    Ici, cmd est le nom d'une commande et doit donc commencer par un antislash (\). len est une longueur et peut prendre la forme 3cm (longueur fixe) ou 3cm plus 0.1mm minus 0.2mm (longueur élastique). Les unités suivantes sont reconnues par TeX :

    L'argument len peut être précédé d'un signe moins (-) pour créer (avec \setlength) une longueur négative ou pour retrancher (avec \addtolength) une longueur d'une autre. len peut être exprimé en fonction d'une autre longueur :

         \addtolength{\malongueur}{-0.3\linewidth}
    

    Avec le package calc, on peut même enchaîner des additions ou soustractions dans l'argument len de \setlength et \addtolength.

    On dispose également des fonctions suivantes pour définir une longeur en fonction des dimensions d'une ou plusieurs boîtes (voir Manipulation des boîtes, Section 6.23) :

    \settowidth{cmd}{texte}

    donner à la longueur cmd la width de texte

    \settoheight{cmd}{texte}

    donner à la longueur cmd la height de texte

    \settodepth{cmd}{texte}

    donner à la longueur cmd la depth de texte

    Ces commandes prennent la longueur naturelle du texte (notamment des espaces) passé en argument. Le texte est dit composé en LR mode par TeX (LR = Left to Right).

    Pour définir des longueurs élastiques, on peut utiliser entre autres les commandes :

    \fill

    longueur élastique de longueur naturelle nulle et pouvant s'étirer autant que nécessaire (en restant positive).

    \stretch{dec_num}

    longueur élastique de longueur naturelle nulle, ayant une extensibilité (stretchability) égale à dec_num fois celle de \fill, où dec_num est un nombre décimal, par exemple 12.42.

    Pour faire des calculs sur les longueurs, le package calc se révélera très pratique (évite d'avoir à écrire 17 \addtolength successifs...).

    Quand on choisit des longueurs, c'est souvent une bonne idée de les exprimer en fonction de longueurs caractéristiques du document comme :

    \linewidth

    largeur d'une ligne de texte (notamment en multi-colonnes ou dans un environnement de type quote)

    \columnwidth

    largeur d'une colonne (identique à \textwidth pour un document en une seule colonne)

    \textwidth

    largeur du corps de texte

    \textheight

    hauteur du corps de texte

    \baselineskip

    interligne de base (ne pas oublier \baselinestretch)


    6.22 Les espaces

    Plusieurs commandes permettent d'insérer des espaces verticaux ou horizontaux entre les boîtes placées par TeX :


    6.23 Manipulation des boîtes


    6.23.1 Concepts et principes de base

    Comme nous l'avons vu dans la présentation de TeX, ce programme ne fait « que » placer des boîtes les unes par rapport aux autres sans se soucier de leur contenu.

    Une boîte pour TeX est définie par sa largeur (width), sa hauteur (height) et sa profondeur (depth). Elle est rectangulaire, de dimensions width.(height+depth).

    Afin que les lettres comme g, q ou y soient placées correctement, le reference point n'est pas en bas de la boîte pour ces lettres (autrement dit, ces lettres ont une profondeur non nulle). Ce n'est pas le cas pour une lettre comme o ou i.

    Dans une ligne d'un paragraphe, les reference points de toutes les boîtes sont alignés comme nous venons de le voir, le long de la ligne de base (base line). L'espacement vertical entre deux lignes consécutives est défini par les valeurs de \baselineskip (une longueur — voir Les longueurs, Section 6.21) et \baselinestretch (une valeur de 2 pour \baselinestretch produira un interligne double ; penser tout de même à jeter un œil aux packages comme doublespace si l'on a à se livrer à de telles abominations typographiques).


    6.23.2 Commandes


    6.23.2.1 Créer des boîtes

    Les commandes \mbox{texte} et \makebox[largeur][pos]{texte} produisent une boîte dans laquelle texte est composé en LR mode. En particulier, les espaces y ont leur longueur naturelle et il n'y a aucune césure ni retour à la ligne (ce dernier point se révèle souvent pratique).

    La boîte produite par ces commandes a la largeur du texte composé sauf dans le cas de \makebox si on utilise l'argument optionnel largeur pour forcer la largeur de la boîte à une autre valeur (ce qui permet de faire croire par exemple qu'un texte à une largeur nulle, donc de réécrire par dessus le dessin qu'elle produit, etc.). Dans ce dernier cas, l'argument pos permet de dire comment on veut que le texte soit placé par rapport à la boîte :

    On peut encadrer une boîte avec la commande \frame{contenu}. Ce cadre est collé au contenu de la boîte donc est pratique pour faire des tests mais peu élégant quand il s'agit d'encadrer un élément du document pour le faire ressortir.

    La commande \fbox{contenu} encadre elle aussi son argument tout en produisant une boîte, mais elle ménage un espace de longueur \fboxsep entre le contenu et le cadre. De plus, la largeur des traits format le cadre peut être réglée au moyen de la longueur \fboxrule. LaTeX définit également la commande \framebox[largeur][pos]{contenu} qui entretient avec \fbox{contenu} la même relation que \makebox[largeur][pos]{texte} avec \mbox{texte}.

    On a souvent besoin de générer une grosse boîte contenant plusieurs autres boîtes. La commande \mbox et ses dérivées le font, mais leur contenu ne peut dépasser une ligne (de boîtes). Si l'on veut une grosse boîte avec des retours à la ligne entre les petites boîtes qui se trouvent à l'intérieur, on peut utiliser les deux structures suivantes :

         \parbox         [pos]{largeur}{texte}
         \begin{minipage}[pos]{largeur} texte \end{minipage}
    

    Ces commandes produisent une boîte de largeur largeur, contenant texte (ce qui détermine la hauteur de la boîte) et dont le reference point est placé suivant les valeurs de pos :

    Des deux possibilités, l'environnement minipage est en général préférable car plus robuste. Exemple :

         \usepackage{calc}
         
         (...)
         
         \newlength{\bla}%
         \setlength{\bla}{7cm}%
         %
         \noindent\begin{minipage}{\bla}
         Tout cela est très intéressant, retours à la ligne automatiques ou\\
         forcés, etc.
         \end{minipage}%
         \begin{minipage}{\linewidth-\bla}
         Et voici une grosse boîte placée à droite de la précédente, de longueur son
         complémentaire par rapport à la longueur d'une ligne de texte...
         \end{minipage}
    

    L'environnement minipage est extrêmement utile. Pensez à l'utiliser dès qu'il y a une mise en page un peu complexe à faire, ou bien quand vous n'arrivez pas à mettre ce que vous voulez dans une cellule d'un environnement tabular.

    La commande \rule[monter]{largeur}{hauteur} produit une rectangle « plein » de dimensions largeur.hauteur dont le reference point est par défaut le coin bas-gauche du rectangle. Si monter est une longueur positive, le reference point est en-dessous du côté bas du rectangle, donc celui-ci est au-dessus de la ligne de base. Si elle est négative, le rectangle est au contraire baissé par rapport à cette ligne.

    Cette commande est souvent utilisée avec une largeur nulle afin de forcer la hauteur d'une ligne à hauteur. Le rectangle est alors invisible, mais TeX en tient compte pour que les boîtes qu'il manipule ne se chevauchent pas en hauteur. On peut s'en servir par exemple pour augmenter la hauteur d'une ligne d'un environnement tabular.


    6.23.2.2 Les manipuler

    La commande \raisebox{len}[hauteur][profondeur]{texte} produit une boîte :

    Si profondeur est omis ou hauteur et profondeur, ces arguments prennent comme valeurs par défaut les dimensions naturelles de la texte.

    Les longueurs \width, \height, \depth et \totalheight peuvent être utilisées dans l'arguemnt largeur de \makebox et \framebox et dans les arguments len, hauteur et profondeur de \raisebox pour faire référence aux dimensions de la boîte manipulée.

    Les packages graphics et graphicx (le dernier étant une version étendue du premier, donc préférable) fournissent plusieurs commandes pour la manipulation des boîtes :

    Quand la boîte est une image insérée avec \includegraphics, certaines opérations peuvent être effectuées directement avec :

         \includegraphics[angle=30, height=5cm]{image}
    

    (syntaxe autorisée par le package graphicx).

    Pour plus d'informations sur ces commandes, se reporter au document Packages in the graphics bundle qui devrait être fourni avec votre distribution.

    Quelques transformations du type rotation ne sont pas bien supportées par les viewers de fichiers DVI (le format DVI n'est pas censé les inclure). Dans ce cas, on visualisera directement le fichier PostScript pour vérifier les pages en question. Ce problème ne se pose pas si l'on travaille avec le format PDF.


    6.24 Inclure des images


    6.24.1 Principe et commande \includegraphics

    Très simple, à condition d'avoir l'image au format :

    Il suffit d'utiliser une commande du type :

         \includegraphics[width=0.7\linewidth]{monimage}
    

    On peut être plus précis en indiquant :

         \includegraphics[width=0.7\linewidth]{monimage.eps}
    

    par exemple, mais je préfère ne pas mettre l'extension, ce qui permet de recompiler le document TeX sans modification, par exemple avec latex (qui prend des images au format EPS) ou avec pdflatex en mode PDF (qui ne prendra pas ces dernières mais pourra utiliser des images au format PDF ou PNG, par exemple). Lorsque l'extension est omise, il peut aussi y avoir conversion automatique de EPS vers PDF, si la distribution TeX n'est pas trop ancienne.

    Dans le cas des images générées par MetaPost, je conseille toujours d'omettre le suffixe du fichier dans l'appel à \includegraphics, mais il faut alors s'assurer que le fichier a pour extension .mps[34] au lieu de .1, .2, etc. C'est en effet l'extension qu'attend pdfTeX pour les fichiers PostScript produits par MetaPost.

    La commande \includegraphics qui est définie dans le package graphicx[35] permet d'appliquer de nombreuses transformations (rotations, mises à l'échelle, etc.) à l'image au moment de son insertion avec une syntaxe du type \includegraphics[...,angle=45,...]{nom_du_fichier}[36].

    La commande \includegraphics produit une boîte. À vous de la mettre dans un environnement figure si vous le jugez utile (la majorité des cas a priori).


    6.24.2 Quelques programmes produisant des schémas

    Note préliminaire : sauf erreur, tous les programmes présentés dans cette section (comme dans le reste du document, d'ailleurs) sont des logiciels libres.

    Il fut un temps où pdfTeX n'existait pas, et tout le monde transformait son fichier .tex en .ps (PostScript) en passant par le format DVI (.dvi). Il fallait alors avoir toutes ses figures et images au format EPS, ce qui n'était pas forcément évident en dehors du monde Unix. Aujourd'hui, les formats d'images supportés par pdfTeX et dvipdfm(x)[37] sont plus variés et pour la plupart largement utilisés en dehors du monde TeX, ce qui fait qu'il n'y a plus vraiment difficulté à ce niveau-là. Il n'en reste pas moins que les logiciels développés depuis les années 1990 en lien plus ou moins étroit avec le monde TeX pour permettre la création de figures, schémas et graphiques, sont toujours là et, pour certains d'entre eux, toujours très intéressants.

    Afin de dissiper tout malentendu, si vous utilisez pdfTeX en mode PDF[38] ou dvipdfm(x) et avez votre image au format JPEG, PNG ou PDF, il n'y a aucun problème : vous pouvez l'inclure directement (par exemple, le logiciel libre Inkscape est excellent pour travailler avec les images vectorielles, et Gimp pour les images bitmap). La plupart des programmes mentionnés ci-dessous sont des logiciels libres permettant de créer des figures, schémas ou autres en lien avec TeX, dans certains cas directement depuis le fichier .tex, dans d'autres cas en passant par des fichiers externes. Au minimum MetaPost, TikZ, matplotlib et PSTricks permettent d'inclure des portions de texte (éventuellement des formules mathématiques) rendues avec TeX. Ceci permet d'avoir des figures en harmonie avec le reste du document, notamment au niveau des polices de caractères.

    Un de ces programmes que je trouve particulièrement intéressant est MetaPost, une adaptation de METAFONT permettant de générer des images EPS, PNG ou SVG (voir Customizing Run-Time Behavior dans le manuel de MetaPost, notamment le paramètre outputformat). Pour créer une figure avec MetaPost, il faut programmer dans son langage. Aïe, dirons certains... Cependant, ce language est assez bien conçu et permet aisément de décrire des figures complexes telles que des fractales, en laissant MetaPost calculer la position des divers éléments d'après une description très géométrique, logique, de la figure. Ainsi, une modification de constante se répercute automatiquement sur toute la figure si nécessaire ; on n'a pas besoin de faire soi-même les calculs pour que telle droite soit perpendiculaire à telle autre, tel point situé aux deux tiers de tel segment, etc. On peut décrire la figure de manière « symbolique », on règle les constantes et MetaPost se charge des calculs.

    Par exemple, pour définir H comme le point d'intersection des hauteurs issues de A et B dans le triangle ABC (autrement dit l'orthocentre de ce triangle), il suffit d'écrire, en notant respectivement a, b, c et h les couples (x,y) de coordonnées des points A, B, C et H dans le repère implicite utilisé par MetaPost :

         pair h;
         
         (h-a) dotprod (c-b) = 0;
         (h-b) dotprod (c-a) = 0;
    

    (notez que dotprod signifie dot product et correspond donc au produit scalaire de deux vecteurs). Du moment que suffisamment de relations ont été données à MetaPost pour lui permettre de « connaître » a, b et c, ces trois lignes sont suffisantes pour déterminer les coordonnées de l'orthocentre du triangle.

    De la même manière, toujours dans un triangle ABC déjà défini, on peut déterminer le pied A' de la hauteur issue de A de la manière suivante (où ap désigne l'objet de type pair recevant les coordonnées de A') :

         pair ap;
         
         % Égalité vectorielle signifiant « A' est sur la droite (BC) »
         ap = whatever[b,c];
         % Produit scalaire nul traduisant l'orthogonalité de deux vecteurs
         (c-b) dotprod (ap-a) = 0;
    

    Ces petits exemples illustrent l'esprit du language MetaPost, cependant il faut les habiller un peu pour obtenir un fichier MetaPost compilable (il faut au minimum ajouter un beginfig(1); au début, un endfig; à la fin et définir a, b et c [objets de type pair] pour MetaPost). Voir Un exemple complet avec MetaPost, Section 6.24.2.1 pour un autre exemple simple, mais néanmoins compilable tel quel.

    Pour ceux qui aiment programmer, il y a aussi également TikZ et PSTricks. Dans les deux cas, on écrit généralement le code décrivant la figure directement dans son document LaTeX[39]. Ici, PSTricks est le vénérable ancêtre ; il est puissant et possède une riche bibliothèque de fonctions, mais est limité au format PostScript. TikZ est venu nettement plus tard, a également suscité un engouement très important (qui n'a pas cessé en 2019, à l'heure où j'écris ces lignes), possède aussi une bibliothèque de fonctions très étendue, et utilise une architecture plus générique que celle de PSTricks, s'appuyant sur la couche PGF, laquelle lui permet de supporter aussi bien PostScript que PDF et SVG comme formats de sortie.

    TikZ est très populaire, et ce à juste titre, car il permet d'obtenir de très beaux résultats avec un volume de code raisonnable pour un grand nombre de types d'illustrations. De plus, son intégration au sein d'un document TeX est excellente, sans doute inégalée. Précisons un peu :

    Pour conclure ce petit aperçu de TikZ et MetaPost, je dirais que même si MetaPost me semble mieux conçu que TikZ au niveau du langage auquel le code utilisateur doit se conformer, plus propre et plus lisible à mon avis, les très nombreuses fonctionnalités offertes par TikZ, son excellente intégration avec (La)TeX et son très bon support du format PDF en sortie, en font une extension extrêmement utile à (La)TeX et justifient sans aucun doute la popularité qu'il a acquise au fil des ans. Sur un autre plan, il y a encore des gens qui utilisent PSTricks, mais je n'en vois pas trop l'intérêt maintenant que l'on dispose de TikZ (à moins que le support du driver PostScript par TikZ/PGF ne soit pas au niveau du driver PDF ? Aucune idée ; si vous savez, vous pouvez me laisser un petit mot ;-).

    Pour ceux qui ne veulent pas programmer, ou simplement pour les cas où il est plus pratique de tracer sa figure à la souris, il existe divers programmes plus ou moins complets et plus ou moins récents. Un logiciel libre remarquable pour réaliser des dessins vectoriels avec la souris en WYSIWIG est Inkscape. Son format d'enregistrement natif est SVG, mais il peut très bien exporter des fichiers PDF utilisables avec les logiciels s'appuyant sur TeX. Il y a aussi des logiciels libres plus anciens ou moins généralistes qu'Inkscape à ma connaissance, tels que xfig, tgif et dia sour Unix, qui génèrent au moins du PostScript.

    Pour tracer des courbes, surfaces, histogrammes, etc., n'oublions pas l'excellent matplotlib[41] qui permet d'utiliser toute la puissance et l'expressivité du langage Python pour décrire des graphiques extrêmement variés. On en a longtemps rêvé, et John D. Hunter l'a fait. Un autre outil pour faire des graphes de toutes sortes, qui est de la même famille que TikZ et a l'air très complet, est le package pgfplots. On peut également utiliser des programmes tels qu'Asymptote, GNUPlot ou Scilab, voire directement MetaPost[42], TikZ[43], PSTricks...

    On pourrait continuer encore assez longtemps à citer des programmes de ce type. On trouvera peut-être plus de renseignements avec le LaTeX Navigator, plus précisément à l'adresse http://tex.loria.fr/english/prod-graph.html.


    6.24.2.1 Un exemple complet avec MetaPost

    Voici un exemple complet (valide tel quel) montrant comment tracer un triangle, ses médianes et son centre de gravité (I, J et K sont les milieux respectifs de [BC], [CA] et [AB], G est le centre de gravité du triangle ABC) :

         outputtemplate := "figure%c.mps";
         
         % Ce qui suit permet d'utiliser LaTeX pour les labels rendus avec btex ... etex
         verbatimtex
         %&latex
         \documentclass[a4paper,12pt,french]{article}
         \usepackage{lmodern}
         \usepackage[T1]{fontenc}
         \usepackage[utf8]{inputenc}
         \usepackage{textcomp}
         
         \usepackage{babel}
         \frenchbsetup{AutoSpacePunctuation=false}
         
         % À charger après babel si l'on utilise l'option « babel »
         \usepackage[final,babel,factor=1000]{microtype} % 1000 : valeur par défaut
         
         % Pour écrire AB, (AB), [AB], etc.
         \newcommand{\pts}[1]{\ensuremath{\mathit{#1}}}
         
         \begin{document}
         etex
         
         % La figure MetaPost proprement dite (il peut y en avoir plusieurs dans un
         % même fichier).
         beginfig(1);
           numeric u;
           pair a, b, c, i, j, k, g;
         
           u := 1cm;
         
           a := (1,4)*u;
           b := (0,0)*u;
           c := (4,0)*u;
         
           i := 0.5[b,c];
           j := 0.5[c,a];
           k := 0.5[a,b];
         
           g = whatever[a,i];
           g = whatever[b,j];
         
           draw a--b--c--cycle;
           draw a--i;
           draw b--j;
           draw c--k;
         
           label.top(btex \pts{A} etex, a);
           label.llft(btex \pts{B} etex, b);
           label.lrt(btex \pts{C} etex, c);
           label.bot(btex \pts{I} etex, i);
           label.urt(btex \pts{J} etex, j);
           label.llft(btex \pts{K} etex, k);
           label(btex \pts{G} etex, g+4.8*(2,0.3)*pt);
         endfig;
         
         % Pour terminer proprement les labels rendus avec btex ... etex
         verbatimtex
         \end{document}
         etex
         
         end
    

    Pour « compiler » ce code MetaPost, il suffit de le stocker dans un fichier appelé par exemple figures.mp, puis de lancer la commande

         mpost figures
    

    ou encore :

         mpost figures.mp
    

    On obtient alors un fichier figure1.mps (son format est EPS, précisément le sous-ensemble de EPS utilisé par placer cette figure dans un document compilé par MetaPost, sous-ensemble que pdfTeX sait traiter). Si le document TeX est fait avec LaTeX et compilé par exemple avec pdflatex en mode PDF, pour inclure la figure, il suffit alors d'utiliser \includegraphics{figure1} après avoir vérifié que l'on a bien \usepackage{graphicx} dans le préambule du document.


    6.24.3 Particularités liées au format PostScript

    Cette section peut probablement être laissée de côté si vous n'utilisez pas d'images PostScript dans vos documents. Ces choses-là étaient importantes quand la seule voie possible pour inclure des images était de passer par le format DVI et de convertir en PostScript, mais avec les formats supportés actuellement par les drivers TeX modernes (PDF, PNG, JPEG...), je crois que ces considérations sont devenues secondaires.

    Il est important d'avoir en tête qu'une image EPS est un rectangle découpé dans une page PS, dont les dimensions sont déterminées par sa bounding box (indiquée en points PostScript — voir Les longueurs, Section 6.21), que cette bounding box détermine la dimension qu'a l'image aux yeux du moteur TeX (en tant que boîte), mais qu'elle n'empêche pas le fichier EPS de dessiner en-dehors de cadre !

    Il m'est ainsi arrivé de ne pas comprendre pourquoi j'avais un morceau de texte effacé (en blanc) au-dessus d'un graphique inséré avec \includegraphics. C'était le fichier EPS qui écrivait en-dehors de sa bounding box. La solution, trouvée dans le document Packages in the graphics bundle (traduction française), a simplement consisté à utiliser \includegraphics* au lieu de \includegraphics. Ainsi, l'image incluse ne peut écrire à l'extérieur de sa bounding box (en anglais, on dit qu'elle est clipped — \includegraphics* est indentique à \includegraphics[..., clip] si l'on utilise le package graphicx).

    La question qui vient maintenant, en tout cas si vous utilisez latex et non pdflatex, est « comment obtenir des images au format EPS ? »

    Une fois que vous disposez d'une image EPS, vous pouvez éditer sans crainte sa bounding box en modifiant la ligne :

         %%BoundingBox: x1 y1 x2 y2
    

    où (x1,y1) sont les coordonnées (en points PostScript) du coin bas-gauche de la bounding box et (x2,y2) celle de son coin haut-droit. Pour plus d'informations sur le sujet, se reporter au document Using Imported Graphics in LaTeX and pdfLaTeX (traduction française) — voir aussi Où trouver de la documentation ?, Chapitre 9.


    6.25 Et la couleur ?

    Une question est parfois entendue venant des personnes qui ne connaissent pas bien TeX et ses amis : « peuvent-ils faire de la couleur ? »

    Oui, bien-sûr ! En premier lieu, via l'inclusion d'images. En fait, la question n'est pas si bête qu'elle en a l'air. À l'origine, TeX n'a pas été conçu pour faire de la couleur, mais le format DVI permet d'inclure des informations appelées specials qu'il ne comprend pas outre mesure, mais qui peuvent être interprétées lors de la conversion de DVI vers PostScript (typiquement avec dvips) pour décrire la couleur à appliquer à tel ou tel élément, voire des choses tout à fait différentes. Ceci est aussi vrai pour les images que pour le texte mis en couleur avec des packages tels que xcolor ou colortbl. Évidemment, avec des moteurs-drivers tels que pdfTeX qui traduisent directement le TeX en PDF, le format DVI est court-circuité, mais on peut utiliser ces packages de la même façon (voire mieux, car le format PDF gère la transparence, les dégradés...).

    Si vous utilisez pdflatex, le package pdfcolmk de Heiko Oberdiek, en plus du package xcolor, risque d'être très utile.


    6.26 Rudiments sur la gestion des pages (sauts, coupures, en-têtes...)

    Cette section sera nécessairement très incomplète : il y a pas mal de choses à dire sur les page styles et le lecteur aura intérêt à se reporter au LaTeX book et au LaTeX Companion.


    6.26.1 Options des classes de base

    On peut retrouver dans l'argument optionnel de \documentclass les options suivantes (séparées par des virgules), ainsi que toutes celles que l'on souhaite voir passées aux packages qui les supportent (typiquement, french) :

    10pt, 11pt ou 12pt

    taille de la police « normale » du document (cf. \normalsize) ; 10pt par défaut ;

    a4paper, a5paper, b5paper, letterpaper, legalpaper ou executivepaper

    format du document[44] ; letterpaper par défaut ;

    landscape

    format paysage pour le document (voir aussi le package geometry) ;

    final ou draft

    utiliser draft (= brouillon) si l'on veut voir les « overfull hboxes » signalés par un carré noir dans la marge du document ; cette option est aussi reconnue par le package graphicx qui, si elle lui est passée, lui fait insérer les cadres des images dans le document au lieu de mettre les images elles-mêmes (ceci accélère beaucoup la visualisation du document avec certaines images) ;

    oneside ou twoside

    document recto-verso si twoside, recto seulement si oneside (dans le cas d'un document recto-verso, les marges ne sont pas les mêmes sur une page paire et sur une page impaire) ; oneside est la valeur par défaut dans les classes de base de LaTeX sauf dans la classe book ;

    openright ou openany

    avec openright, un chapitre (\chapter) ne peut commencer que sur une page paire, alors qu'il peut commencer sur n'importe quelle page avec openany ; openany est la valeur par défaut dans la classe report et c'est openright dans la classe book ;

    onecolumn ou twocolumn

    document en une ou deux colonnes de texte (dans ce dernier cas, l'espace entre les colonnes et la largeur de la ligne séparatrice, largeur éventuellement nulle, sont réglés par \columnsep et \columnseprule) ; onecolumn par défaut ; voir le package multicol qui permet beaucoup plus de choses (p. ex. de changer à tout moment le nombre de colonnes dans un document et de vraiment choisir combien on en veut) ;

    notitlepage ou titlepage

    spécifie si la commande \maketitle et l'environnement abstract doivent se réserver une page chacun ; par défaut, c'est titlepage dans toutes les classes de base de LaTeX sauf dans article ;

    openbib

    précise un style particulier pour la bibliographie...

    leqno

    met les numéros d'équations sur la gauche dans les environnements equation et eqnarray ;

    fleqn

    les displayed formulas sont placées à une distance fixe (\mathindent) de la marge gauche au lieu d'être centrées si on utilise cette option (flush the equations)


    6.26.2 Les page styles

    Le contenu de l'en-tête et du pied de page d'une page donnée est généré selon les spécifications du page style de la page en question. Il existe plusieurs page styles prédéfinis, notamment :

    plain

    numéro de page centré dans le pied de page et en-tête vide ; c'est le page style par défaut pour les classes article et report ;

    empty

    en-tête et pied de page vides ; LaTeX continue de numéroter les pages, mais les numéros n'apparaissent pas en pied de page ;

    headings

    diverses informations comme le numéro de page sont mises en en-tête ; pied de page vide ;

    myheadings

    similaire à headings ; on peut choisir ce que l'on met dans l'en-tête avec les commandes \markboth{en-tête-de-gauche}{en-tête-de-droite} et \markright{en-tête-de-droite} (pour un document non recto-verso, toutes les pages sont considérées comme étant à droite, i.e. de numéro impair en principe). Les arguments de ces deux commandes sont des moving arguments et sont traités par TeX en LR-mode.

    On choisit le page style courant avec la déclaration \pagestyle{nom_du_style}. Le contenu de l'en-tête et du pied de page d'une page donnée est déterminé par le page style actif à la fin de cette page.

    Le page style empty est utile pour les pages de garde et leur verso. Pour pouvoir vraiment choisir le contenu des en-têtes et pieds de pages, on utilisera le package fancyhdr (autrefois appelé fancyheadings, nom qui a posé quelques problèmes à des systèmes d'exploitations lamentables comme MS-DOS, d'où le nouveau nom de 8 lettres).

    La commande \thispagestyle, très utile, est identique à \pagestyle à ceci près qu'elle n'affecte que la page courante.

    On peut affecter la numérotation des pages dans les page styles de base de LaTeX (par opposition à ceux que l'on crée quand on utilise le package fancyhdr) avec les commandes \pagenumering{arabic} et \pagenumbering{roman} (numérotation en chiffres arabes romains).


    6.26.3 Quelques commandes en vrac

    On peut passer du format « une colonne » au format « deux colonnes » et inversement avec les déclarations \onecolumn et \twocolumn. Voir aussi le package muticol.

    Les déclarations \flushbottom et \raggedbottom permettent respectivement d'avoir des pages justifiées verticalement (donc toutes de la même hauteur, ceci concernant le corps de texte — les en-têtes et pieds de pages n'en font pas partie) ou simplement alignées en haut.

    On termine une ligne sans la justifier avec \\ (ou sa variante étoilée — cf. Forcer des sauts de lignes, Section 6.5) ou \newline. Si l'on utilise \linebreak, le résultat est complètement différent dans un paragraphe justifié car on dit simplement à TeX de couper la ligne à l'endroit où apparaît la commande, donc celle-ci est justifiée !

    Il y a le même type de commande au niveau des pages avec \newpage, \clearpage et \cleardoublepage qui terminent une page normalement, donc sans la justifier, et \pagebreak qui indique à TeX de couper la page à l'endroit où apparaît la commande, donc qui résulte en une page justifiée (sauf si l'on utilise \raggedbottom).

    Les commandes \clearpage et \cleardoublepage sont identiques à \newpage à ceci près qu'elles autorisent LaTeX à placer sur une ou plusieurs pages sans texte tous les flottants (environnements figure ou table par exemple) qui n'ont pas pu être placés sur les pages précédentes. La commande \cleardoublepage, à la différence de \clearpage, assure que la page commencée après son occurrence sera une page de droite (numéro impair en principe) — elle crée une page vide au besoin.

    Plusieurs commandes du type \newpage les unes à la suite des autres ne produisent pas plusieurs pages vierges. Pour cela, il faut mettre quelque chose sur chaque page, comme par exemple une boîte vide (\mbox{}) donc invisible.

    \linebreak et \pagebreak permettent donc de forcer une coupure de ligne ou de page. Symétriquement, \nolinebreak et \nopagebreak servent à dire à TeX qu'on ne veut pas de coupure à l'endroit où apparaissent ces commandes. On peut nuancer tout ceci en dissuadant TeX avec plus ou moins d'insistance de faire ces coupures, plutôt qu'en le lui interdisant, avec \nolinebreak[0] à \nolinebreak[4] (équivalent à \nolinebreak) et \nopagebreak[0] à \nopagebreak[3].


    [ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ suivant ]


    Présentation rapide de LaTeX2e

    Version 1.30 (1er août 2019)

    Florent Rougon mailto:f . rougon (**AT**) free [point] fr