[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ suivant ]
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 ! ;-)
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.
un espace = n espaces = p espaces suivis d'un retour à la ligne suivi de q espaces non suivis d'un retour à la ligne. Les espaces dont il est question ci-dessus sont de vrais espaces dans le fichier source. Les combinaisons indiquées forment la même unité pour TeX, en quelque sorte un « espace logique », elles sont parfaitement équivalentes.
Une ligne blanche, c'est-à-dire contenant zéro ou un nombre quelconque d'espaces, est équivalente à n lignes blanches successives et forme un saut de paragraphe.
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.
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.
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).
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) :
avant la double ponctuation (! ? : ;) ;
avant le % et les unités (monétaires, kilométriques, etc.) ;
avant le guillement fermant (») et le tiret signalant une parenthèse au milieu d'une phrase (long, tapé avec deux — de préférence — ou trois tirets dans un source LaTeX : -- ou ---) ;
avant « (et bien-sûr après » , ; : . ! ?[21]) et le tiret dont il est question ci-dessus ;
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)...
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.
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 :
tout caractère qui n'est pas une lettre[24] termine le nom d'une commande ;
si le nom d'une commande est terminé par un espace (logique), alors cet espace est ignoré. Autrement dit, il sert à délimiter le nom de la commande mais n'est pas inséré dans le document résultant.
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.
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}
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.
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.
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...
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.
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 :
ceci est le premier élément d'une liste non numérotée
les conventions typographiques américaines veulent que les éléments soient précédés d'un point noir (comme Word par défaut)
en France, on préfère 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 !
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 :
A small animal, found in the North Woods, that causes no end of trouble.
A large animal, found in crossword puzzles, that causes no end of trouble.
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)
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 :
\textup \upshape (upright shape)
\textit \itshape (italic shape)
\textsl \slshape (slanted shape)
\textsc \scshape (small caps shape)
\textmd \mdseries (medium series)
\textbf \bfseries (bold face series)
\textrm \rmfamily (roman family)
\textsf \sffamily (sans serif family)
\texttt \ttfamily (typewriter family)
\textnormal \normalfont (la fonte « normale » du document — shape, series et family)
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.
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.
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.
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}
où colonnes est une séquence d'éléments spécifiant les différentes colonnes du tableau, parmi lesquels :
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) ;
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) ;
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) ;
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 ;
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 :
arrayAméliore les environnements tabular et array de LaTeX2e.
tabularxSimilaire à 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.
booktabsDé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.
ctableDé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.
cellspaceLe 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}.
makecellPermet 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...
multirowPermet, comme makecell, de réaliser des cellules qui s'étalent sur plusieurs lignes d'un tableau.
colortblPermet de colorer (ou serait-ce colorier ? ;-) le contenu et/ou le pourtour de certaines cellules d'un tableau.
longtableAvec 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.
supertabularMê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...
tabuFournit 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.
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}
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.
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.
La commande \tableofcontents produit une table des matières. Plus précisément :
elle dit à LaTeX d'écrire un fichier d'extension toc (toto.tex -> toto.toc) avec dedans les informations nécessaires à la génération d'une table des matières dans le document final ;
elle dit à LaTeX de lire le fichier toc s'il existe déjà et de placer dans le document la table des matières générée à partir des informations contenues dans ce fichier.
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.
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.
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.
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 :
\thectr (en numérotation décimale par défaut, mais peut être redéfinie avec \renewcommand)
\arabic{ctr} (numérotation décimale)
\roman{ctr} (i, ii, iii, iv, v, vi...)
\Roman{ctr} (I, II, III, IV, V, VI...)
\alph{ctr} (a, b, c, d, e, f... pour ctr inférieur à 27)
\Alph{ctr} (A, B, C, D, E, F... pour ctr inférieur à 27)
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).
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 :
créer une longueur de nom cmd
affecter à la longueur cmd la valeur de 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 :
cm (centimètre)
mm (millimètre)
em (largeur approximative d'un M dans la fonte courante)
ex (hauteur approximative d'un x dans la fonte courante)
in (pouce ; 1 in = 2,54 cm)
pc (pica ; 1 pc = 12 pt)
pt (point ; 1 in = 72.27 pt)
bp (big point, également appelé point PostScript ; 1 in = 72 bp)
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) :
donner à la longueur cmd la width de texte
donner à la longueur cmd la height de 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 :
longueur élastique de longueur naturelle nulle et pouvant s'étirer autant que nécessaire (en restant positive).
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 :
largeur d'une ligne de texte (notamment en multi-colonnes ou dans un environnement de type quote)
largeur d'une colonne (identique à \textwidth pour un document en une seule colonne)
largeur du corps de texte
hauteur du corps de texte
interligne de base (ne pas oublier \baselinestretch)
Plusieurs commandes permettent d'insérer des espaces verticaux ou horizontaux entre les boîtes placées par TeX :
\hspace{len} et \hspace*{len} insèrent un espace horizontal de valeur (fixe ou élastique) len ; dans le cas de \hspace, aucun espace n'est inséré s'il tombe en début ou fin de ligne ;
\vspace{len} et \vspace*{len} insèrent un espace vertical de valeur (fixe ou élastique) len ; dans le cas de \vspace, aucun espace n'est inséré s'il tombe en début ou fin de ligne.
\vspace et \vspace* ne sont valables qu'en mode paragraphe (donc pas en LR mode, dont nous avons brièvement parlé en Les longueurs, Section 6.21, ni en mode mathématique). Elles peuvent apparaître entre deux paragraphes ou au milieu d'un paragraphe. Dans ce dernier cas, l'espace est ajouté après la ligne dans laquelle se trouve la commande.
\smallskip, \medskip et \bigskip insèrent des espaces verticaux et sont respectivement équivalentes à \vspace{\smallskipamount}, \vspace{\medskipamount} et \vspace{\bigskipamount} ;
\addvspace{len} insère un espace vertical de longueur len, sauf si un espace vertical a déjà été inséré au même endroit du source par cette même commande, auquel cas elle n'insère que l'espace nécessaire pour que la longueur naturelle de l'espace total résultant soit égale à len. Cette commande doit être utilisée entre deux paragraphes. C'est elle qui sert à insérer les espaces verticaux avant et après la plupart des environnements LaTeX qui commencent un nouveau paragraphe.
\hfill est équivalente à \hspace{\fill} ;
\vfill est équivalente à une ligne blanche suivie de \vspace{\fill} et ne devrait être utilisée qu'en mode paragraphe.
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).
Les boîtes sont placées par TeX les unes contre les autres dans le sens de la largeur, éventuellement séparées par des espaces (entre les mots).
Le placement dans le sens de la hauteur est fonction de la hauteur et de la
profondeur de la boîte. La ligne à une distance depth du bas de la
boîte (et donc à une distance height du haut de la boîte) constitue la
référence pour le placement vertical de la boîte ; l'intersection de cette
ligne avec le bord gauche de la boîte est appelée le reference point
de la boîte (on pourra trouver un schéma représentant ces concepts dans le
document Using Imported Graphics
in LaTeX and pdfLaTeX (traduction
française) — voir Où
trouver de la documentation ?, Chapitre 9). Quand TeX compose un
paragraphe, il place toutes les boîtes de sorte que les reference
points des boîtes situées sur une même ligne du paragraphe soient à la
même hauteur.
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).
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 :
s'il n'est pas précisé, le texte est centré (horizontalement) par rapport à la boîte de largeur largeur ;
s'il vaut l (pour left), le bord gauche de texte est aligné contre le bord gauche de la boîte ;
s'il vaut r, (pour right), le bord droit de texte est aligné contre le bord droit de la boîte ;
s'il vaut s, (pour stretch), les espaces de texte situés entre les mots sont agrandis ou rétrécis de sorte que texte ait juste la largeur largeur (ils n'ont donc plus leur longueur naturelle).
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 :
si pos n'est pas précisé, le reference point de la boîte est au milieu de son côté gauche ;
si pos vaut b, il est placé au niveau de la base line de la dernière ligne de texte ; autrement dit, la dernière ligne à l'intérieur de la boîte sera à la même hauteur que le texte suivant la boîte ;
si pos vaut t, il est placé au niveau de la base line de la première ligne de texte ; autrement dit, la première ligne à l'intérieur de la boîte sera à la même hauteur que le texte suivant la boîte ;
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.
La commande \raisebox{len}[hauteur][profondeur]{texte} produit une boîte :
contenant texte (souvent une seule boîte) ;
de hauteur hauteur et profondeur profondeur (qui servent au placement des boîtes les unes par rapport aux autres, mais ne correspondent pas forcément à l'étendue de la zone où texte produit un affichage) ;
et baisse la position du reference point de la boîte de sorte à la faire monter de len par rapport à la ligne de base courante.
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 :
\scalebox et \resizebox pour « étirer » ou « contracter » une boîte, horizontalement et/ou verticalement ;
\reflectbox pour faire des effets de miroir (cas particulier de \scalebox) ;
\rotatebox pour faire subir une rotation quelconque à une boîte.
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.
Très simple, à condition d'avoir l'image au format :
PDF, PNG, JPEG ou le format obtenu avec MetaPost si l'on utilise pdfTeX pour
produire directement du PDF (par exemple avec la commande
pdflatex).
EPS (Encapsulated PostScript) si le document .tex est d'abord
transformé en DVI (par exemple avec la commande latex) puis en
PostScript avec dvips ;
PDF, PNG, JPEG ou EPS (dont le format de sortie de MetaPost) si le document
.tex est d'abord transformé en DVI (par exemple avec la commande
latex) puis en PDF avec dvipdfm ou
dvipdfmx.
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).
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 :
Le code TikZ s'écrit directement au sein du fichier (La)TeX. C'est
souvent très commode, peut coûter un peu en temps de compilation du document
(assez négligeable à moins qu'il n'y ait beaucoup de figures), mais
l'utilisation du package standalone ou de la
bibliothèque TikZ external permet de compiler chaque
figure séparément et donc de remédier en partie à cet inconvénient.
Traditionnellement, avec MetaPost, il fallait mettre le code des figures dans
un ou des fichiers séparés (d'extension .mp), les compiler
séparément avec mpost puis les inclure, typiquement avec
\includegraphics ou \includegraphics* pour un
document LaTeX. Avec LuaTeX et le package luamplib, il est également
possible d'écrire le code MetaPost directement dans le fichier
.tex.
Une figure TikZ a accès à toutes les macros TeX de votre document, aux paramètres tels que \linewidth, aux dimensions et points remarquables de la page courante grâce au nœud current page. Ceci permet de réaliser facilement et proprement des choses telles que :
des décorations de début de chapitre personalisées, fabriquées à la volée avec
les polices du document et incluant typiquement le titre et/ou le numéro de
chapitre (il suffit pour cela de combiner TikZ et le package titlesec, voir par exemple
ici
et là) ;
le placement d'éléments textuels et/ou graphiques de manière absolue par
rapport à la page (exemple : texte ou image en filigrane ; voir Referencing
the Current Page Node — Absolute Positioning dans le manuel de
TikZ et PGF).
TikZ permet de tracer des courbes ou autres objets graphiques allant
d'un endroit à un autre du document (La)TeX, par exemple une flèche reliant un
mot à une formule mathématique située sur la même page[40]. Bien sûr, il ne faut pas abuser
de cette possibilité en mettant des flèches dans tous les sens, mais il y a des
utilisations tout à fait légitimes, par exemple ici,
où les flèches vont pointer précisément des éléments d'un tableau LaTeX qui vit
au sein du document, hors de toute figure TikZ. Cette fonctionnalité
offerte par les options /tikz/remember picture et
/tikz/overlay est très intéressante et me semble difficile à
implémenter avec MetaPost (si vous avez une idée, je suis preneur !).
TikZ gère la transparence tout à fait naturellement ; pour la mettre
en œuvre avec MetaPost, il faut utiliser l'extension MetaFun
de Hans Hagen, la transparence n'étant pas une fonctionnalité offerte par le
MetaPost « de base ». Il me semble que cet aspect est bien mieux géré par
TikZ que par MetaPost (en 2019).
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.
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.
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 ? »
Si vous partez d'une image bitmap et qu'elle est au format JPEG, vous avez intérêt à utiliser jpeg2ps (gratuit, fonctionne sous DOS/Windows et Unix au moins). Dans ce cas, votre EPS sera compact car il utilisera la compression JPEG.
Si vous partez d'une image bitmap non JPEG et que vous ne voulez pas dégrader sa qualité (ce que ferait une compression vers le format JPEG), vous pouvez la convertir avec The Gimp (gratuit, Windows et Unix), convert (gratuit, Unix et peut-être DOS/Windows), Adobe Photoshop (payant, Windows et MacOS) et probablement quelques autres utilitaires plus ou moins sharewares du genre Paint Shop Pro.
Si vous partez d'une image vectorielle et qu'elle n'est pas au format EPS, vous travaillez probablement sous MacOS ou sous Windows. Dans ce dernier cas, installez le driver d'une imprimante PostScript quelconque, imprimez dans un fichier (si possible avec des options comme « optimiser pour la portabilité »), renommez si nécessaire ce fichier en .ps, regardez-le avec un éditeur de texte pour voir s'il a un en-tête PS standard, par exemple :
%!PS-Adobe-3.0
%%Title: camembert.xls
%%Creator: PSCRIPT.DRV Version 4.0
%%CreationDate: 11/14/99 16:36:05
%%BoundingBox: 0 0 595 842
S'il ne commence pas par %!PS-Adobe mais par des commandes
spécifiques à l'imprimante correspondant au driver que vous avez installé,
corrigez-le. Vous pouvez ensuite utiliser GSView pour en extraire une
portion rectangulaire et la mettre dans un fichier EPS. Exemple de début de
fichier EPS :
%!PS-Adobe-3.0 EPSF-3.0
%%Title: camembert.xls
%%BoundingBox: 59 78 731 542
%%Creator: PSCRIPT.DRV Version 4.0
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.
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.
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.
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) :
taille de la police « normale » du document (cf. \normalsize) ; 10pt par défaut ;
format du document[44] ; letterpaper par défaut ;
format paysage pour le document (voir aussi le package geometry) ;
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) ;
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 ;
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 ;
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) ;
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 ;
précise un style particulier pour la bibliographie...
met les numéros d'équations sur la gauche dans les environnements equation et eqnarray ;
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)
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 :
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 ;
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 ;
diverses informations comme le numéro de page sont mises en en-tête ; pied de page vide ;
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).
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)mailto:f . rougon (**AT**) free [point] fr