Licence CC BY-NC-ND

Images, tableaux et texte préformaté

Dans ce chapitre, nous allons apprendre à compléter nos documents en y rajoutant des images, des tableaux, ou encore des blocs de code.

Images

Le package graphicx

Pour insérer une image dans un document, nous allons utiliser le package graphicx. C’est un package très complet qui nous offre de nombreuses possibilités pour afficher des images. Sa commande principale, celle qui permet d’inclure une image dans un document, est la commande \includegraphics. Elle prend en paramètre le chemin du fichier contenant notre image. Voici donc un code insérant une image dans un document.

\documentclass[french]{article}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}

\begin{document}
    Et ici, \includegraphics{garfield} on a inséré l'image d'un chat.   
\end{document}

Ici l’image s’est placé en plein milieu du texte. C’est normal, nous avons laissé l’image dans le même paragraphe que celui du texte qui l’entoure, il est donc dans ce paragraphe. Si nous voulons l’avoir à part, il nous faut changer de paragraphe.

Et le même chat.

\includegraphics{garfield}

Le même chat, mais cette fois centré.
\begin{center}
   \includegraphics{garfield}
\end{center}

Pourquoi notre image n’a-t-elle pas d’extension ?

L’extension n’est pas obligatoire, LaTeX va trouver tout seul l’image. Cependant, il peut y avoir des conflits dans le cas où plusieurs images ont le même nom mais des extensions différentes. En fait, le package graphicx a une liste ordonnée d’extensions possibles ; il cherchera d’abord le fichier avec la première extension, puis la deuxième, etc.

Le dossier courant est celui du fichier compilé. Ainsi, en utilisant subfiles avec un sous-fichier dans un dossier différent de celui du fichier principal, les chemins des images ne seront pas la mêmes selon que l’on veuille compiler le fichier principal ou le fichier secondaire.

Un exemple sera plus parlant. Supposons un projet avec cette arborescence, le fichier img.png étant affiché dans chap1.tex.

projet.tex
img/
   image
chap/
   chap1.tex

Lorsque l’on veut compiler chap1.tex, le chemin de l’image doit être ../img/imgage, mais lorsque l’on veut compiler projet.tex, il doit être img/imgage. Pour ne pas avoir à faire ces remplacements, nous pouvons indiquer à LaTeX où chercher les images.

Ici, nous voyons comment modifier l’ordre des extensions et comment indiquer à LaTeX un dossier où chercher les images.

L’ordre des extensions peut être modifié en utilisant la commande \DeclareGraphicsExtension qui permet de choisir une liste d’extensions.

Notons de plus l’existence de la fonction \graphicspath qui prend en paramètre des dossiers dans lesquels chercher les images. Si on a par exemple beaucoup d’images dans le dossier rsc/png, ça peut être une bonne idée d’utiliser \graphicspath.

\graphicspath{{rsc/}{img/}}
\DeclareGraphicsExtension{png, pdf, jpg}
\includegraphicx{piano}

Ici, les images seront d’abord cherchés dans le dossier courant, puis dans le dossier rsc, et enfin dans le dossier img et on recherchera d’abord le fichier piano.png, puis le fichier piano.pdf et enfin le fichier piano.jpg.

Nous pouvons alors régler le problème que nous avions avec subfiles. En effet, il nous suffit par exemple d’utiliser \graphicspath dans le fichier chap1.tex de notre exemple pour indiquer à LaTeX de chercher dans ../img.

\documentclass[../projet.tex]{subfiles}
\graphicspath{{../}}

\begin{document}
   \includegraphics{img/image}
\end{document}

Ici, si on compile projet.tex, LaTeX cherchera img/image et le trouvera ; si on compile chap1.tex, LaTeX cherchera img/image, ne trouvera pas, cherchera ../img/image et trouvera.

En clair, une stratégie simple est d’utiliser \graphicspath dans les sous-fichiers en donnant pour chaque dossier deux chemins, celui depuis le dossier du fichier principal, et celui depuis celui du sous-fichier.

Modifier l’image

Bien sûr, ce package dispose d’une grande quantité d’options, nous permettant d’indiquer de manière très précise la manière dont on veut afficher l’image. Nous n’allons pas toutes les voir, mais seulement les plus usuelles.

Nous pouvons spécifier les dimensions que nous voulons pour l’image affichée. Les options width et height permettent d’imposer respectivement la largeur et la hauteur de l’image. Lorsque nous n’utilisons qu’une des deux options, LaTeX modifie l’autre longueur pour que l’image ne soit pas déformée (l’image est redimensionnée, mais les proportions sont les mêmes). Mais si nous spécifions les deux, l’image est bien évidemment déformée.

\includegraphics[height=5cm]{garfield}

\includegraphics[width=6cm]{garfield}

\includegraphics[width=6cm,height=5cm]{garfield}

Nous pouvons également utiliser l’option scale qui permet de redimensionner l’image en précisant un ratio. Un ratio de 1 signifie que l’image garde sa taille, un ratio de 2 que ses dimensions sont doublées, un ratio de 0.5 que ses dimensions sont diminuées de moitié. Bien sûr, ce ne sont pas les seuls ratios disponibles ; nous pouvons donner n’importe quel nombre. De plus, si nous donnons un ratio négatif, l’image sera inversée.

\includegraphics[scale=0.5]{garfield}

\includegraphics[scale=1.5]{garfield}

\includegraphics[scale=-1]{garfield}

\includegraphics[scale=-0.5]{garfield}
Mode brouillon

Pour finir, il nous faut parler de l’option draft du package. Elle permet d’accélérer la compilation en n’incluant pas les images, mais en mettant des rectangles à la place. De plus, elle sert également si nous avons besoin d’aide. En effet, avec l’option draft, les images ne sont pas nécessaires et donc nous pouvons poster notre code et les personnes voulant nous aider n’auront pas besoin de l’image pour compiler notre code.

\usepackage[draft]{graphicx}

\begin{document}
   \includegraphics[width=3cm]{garfield}
\end{document}

Si l’option draft est présente dans notre documentclass, nous n’avons pas besoin de la spécifier pour graphicx, il sera chargé avec cette option.

Notons que l’option draft peut être utilisée de manière locale en tant qu’option de la commande \includegraphics. Ainsi, l’image associée ne sera pas affichée ; elle passe en mode brouillon.

Tableaux

Composer un tableau

Les tableaux sont créés avec l’environnement tabular. Il prend en paramètre une description des colonnes du tableau suivant cette règle : on définit une nouvelle colonne à partir d’une lettre qui indique l’alignement du texte de cette colonne.

  • l signifie « aligné à gauche » (left).
  • r signifie « aligné à droite » (right).
  • c signifie « centré » (center).

Avec \begin{tabular}{rlc}, on définit un tableau à trois colonnes, le texte de la première aligné à droite, celui de la deuxième à gauche, et celui de la dernière centré.

On définit ensuite le contenu du tableau (de gauche à droite et de haut en bas) dans l’environnement en suivant les règles qui suivent.

  • On passe à la colonne suivante avec &.
  • On passe à la ligne suivante avec \\.

Ainsi, on peut faire ce code.

\begin{tabular}{lll}
   1 - 1 & 1 - 2 & 1 - 3 \\
   2 - 1 & 2 - 2 & 2 - 3 \\
   3 - 1 & 3 - 2 & 3 - 3 \\
\end{tabular}

Nous devons bien entendu respecter le nombre de colonnes que nous avons spécifié avec l’argument de tabular. Ainsi, ce code nous donnera une erreur.

\begin{tabular}{lll}
   1 & 2 & 3 & 4 \\
\end{tabular}
Tableaux et paragraphes

Notons qu’un tableau fait partie du paragraphe dans lequel il est. Ainsi, avec le code qui suit, le tableau est intégré au texte.

Un tableau 
\begin{tabular}{c}
   Une ligne\\
   Une autre ligne
\end{tabular}
et sa suite.

En fait, l’environnement tabular prend en option l’alignement vertical du tableau : c, l’option par défaut pour le centrer, b (bottom) pour l’aligner en bas et t (top) pour l’aligner en haut. Nous pouvons alors écrire ces codes.

Un tableau 
\begin{tabular}[b]{c}
   Une ligne\\
   Une autre ligne
\end{tabular}
et sa suite.

Un tableau 
\begin{tabular}[t]{c}
   Une ligne\\
   Une autre ligne
\end{tabular}
et sa suite.

Pour avoir le tableau à part, il nous faudra donc le placer dans son propre paragraphe.

Un tableau...

\begin{tabular}{c}
   Une ligne\\
   Une autre ligne
\end{tabular}

La suite.

Néanmoins, il est un peu collé au reste du texte. Pour le détacher, nous allons le placer dans un environnement d’alignement (donc flushleft, center ou flushright). Observons la différence avec ce code.

Un tableau...

\begin{flushleft}
\begin{tabular}{c}
   Une ligne\\
   Une autre ligne
\end{tabular}
\end{flushleft}

La suite.
Filets

Pour le moment, nos tableaux ne sont pas très beaux. Rajoutons des filets.

L’ajout de filets verticaux se fait dans l’argument de l’environnement tabular grâce au symbole |. Avec {l|c|}, on rajoute des filets entre la première et la seconde colonne, et après la seconde colonne.

Les filets horizontaux, eux, sont définis avec le contenu du tableau grâce à la commande \hline. Il suffit de la placer avant le contenu d’une ligne pour avoir un filet horizontal avant cette ligne. On peut alors compléter notre tableau précédent de cette manière.

\begin{tabular}{|l|l|l|}    \hline
   1 - 1 & 1 - 2 & 1 - 3 \\ \hline
   2 - 1 & 2 - 2 & 2 - 3 \\ \hline
   3 - 1 & 3 - 2 & 3 - 3 \\ \hline
\end{tabular}

Qui nous donne le résultat suivant.

1 - 1

1 - 2

1 - 3

2 - 1

2 - 2

2 - 3

3 - 1

3 - 2

3 - 3

Notons qu’il est possible d’avoir des doubles filets. Essayons par exemple ce code.

\begin{tabular}{|l||l||l|}    \hline
   1 - 1 & 1 - 2 & 1 - 3 \\  \hline
   2 - 1 & 2 - 2 & 2 - 3 \\  \hline \hline
   3 - 1 & 3 - 2 & 3 - 3 \\  \hline
\end{tabular}
Filet horizontal partiel

Et, nous pouvons également placer des filets horizontaux partiels grâce à la commande \cline. Avec \cline{i-j}, on crée un filet horizontal entre les colonnes i et j du tableau. Voici un exemple de code utilisant \cline.

\begin{tabular}{|l|l|l|}    \hline
   1 - 1 & 1 - 2 & 1 - 3 \\  \cline{1-1} \cline{3-3}
   2 - 1 & 2 - 2 & 2 - 3 \\  \hline
   3 - 1 & 3 - 2 & 3 - 3 \\  \hline
\end{tabular}

1 - 1

1 - 2

2 - 2

1 - 3

2 - 1

2 - 3

3 - 1

3 - 2

3 - 3

Avec ce code, nous créons un tableau avec un deuxième filet horizontal incomplet (il n’est que sous la première et la troisième colonne).

Répéter un descripteur

Lorsque nous avons plusieurs fois de suite le même type de commande, nous ne sommes pas obligés de toutes les écrire. Il nous suffit de le remplacer par *{<nombre>}{format}. Ainsi, {|c|*{3}{l|}c|} est équivalent à {|c|l|l|l|c|}. Bien sûr, lorsque nous avons peu de colonnes, cela n’est pas très utile, mais lorsqu’on se retrouve à devoir faire un tableau de 10 colonnes à l’alignement identique, ça peut être un plus.

Modifier le tableau
Fixer la largeur d’une colonne

Nous pouvons de plus fixer la largeur d’une colonne (par défaut, elles dépendent de la largeur du contenu). En fixant la taille d’une colonne, on obtient ce qu’on pourrait appeler une « colonne-paragraphe ». Cela se fait avec le descripteur p{<taille>}. Par exemple, essayons ce code.

\begin{tabular}{|l|p{2.5cm}|} \hline
   1 - 1 & Du texte  \\      \hline
   2 - 1 & On met un grand texte qui sera sur plusieurs lignes \\ \hline
\end{tabular}

Le texte est alors justifié.

Choisir le séparateur de colonne

Pour le moment, nos colonnes étaient soient séparés par un filet vertical, soit par rien. Pourtant, il est possible de choisir un séparateur en écrivant @{<symbole>}. On peut par exemple choisir d’avoir $ comme séparateur.

\begin{tabular}{|l@{\$}l|l||}    \hline
   1 - 1 & 1 - 2 & 1 - 3 \\  \hline
   2 - 1 & 2 - 2 & 2 - 3 \\  \hline \hline
   3 - 1 & 3 - 2 & 3 - 3 \\  \hline
\end{tabular}
Notes de bas de page dans un tableau

Essayons de faire une référence dans un tableau.

\begin{tabular}{|l|l|}    \hline
   Ligne 1 \footnote{et colonne 1} & Ligne 2 \\ \hline
\end{tabular}

Et ce code ne fonctionne pas.

Pour faire une note de bas de page dans un tableau, il nous faut utiliser \footnotemark (nous avons enfin un exemple d’un cas où \footnote ne répond pas à nos besoins). Ce qui nous donne ce code.

\begin{tabular}{|l|l|}    \hline
   Ligne 1\footnotemark & Ligne 2 \\ \hline
\end{tabular}
\footnotetext{et colonne 1}
Fusion de cellule
Fusion de ligne

Nous avons déjà fait une fusion de lignes un peu plus haut lorsque nous avons utilisé \cline. Ne pas mettre de filet horizontal entre deux cellules de deux lignes permet de fusionner ces deux cellules.

Pour fusionner des lignes plus simplement, nous pourrons nous tourner vers le package multirow.

Fusion de colonne

La fusion de deux colonnes, elle, se fait à l’aide de la commande \multicolumn. Elle prend trois paramètres, le nombre de colonnes qui doivent être fusionnées, le descripteur que l’on veut pour cette nouvelle colonne, et son contenu.

\begin{tabular}{|l|l|l|}    \hline
   1 - 1 & 1 - 2 & 1 - 3 \\  \hline
   2 - 1 & \multicolumn{2}{c|}{2 à 3} \\  \hline
   3 - 1 & 3 - 2 & 3 - 3 \\  \hline
\end{tabular}

Ici par exemple, nous remplaçons les deux dernières colonnes de la deuxième ligne par une colonne où le contenu, « 2 à 3 », sera centré. On obtient donc ce résultat.

1 - 1

1 - 2

1 - 3

2 - 1

2 à 3

3 - 1

3 - 2

3 - 3

Supprimer la première cellule d’un tableau

En utilisant conjointement \cline et \multicolumn, on arrive à supprimer la première cette d’un tableau. Il suffit de ne pas tracer de filet horizontal au dessus de cette cellule (grâce à \cline) et d’utiliser \multicolumn sur cette cellule pour ne pas placer de filet vertical à sa gauche.

\begin{tabular}{|l|l|}       \cline{2-2}
   \multicolumn{1}{c|}{} & 1 \\  \hline 
   2                     & 3 \\  \hline 
\end{tabular}

L’utilisation conjointe de toutes ces fonctions permet alors de faire des tableaux plus complexes, comme celui qui suit.

\newcommand{\chef}[1]{\textsc{\textbf{#1}}}

\begin{tabular}{|l|c|c|}                                                           \cline{2-3}
   \multicolumn{1}{c|}{}  &  \multicolumn{2}{c|}{Informations}                     \\ \cline{2-3}
   \multicolumn{1}{c|}{}  &  Langue officielle  &  Chef du gouvernement            \\ \hline
   France                 &  Français           &  \chef{François HOLLANDE}         \\ \hline
   Royaume-Uni            &  Anglais            &  \chef{Theresa MAY} \footnotemark \\ \hline
   États-Unis d’Amérique  &  Anglais            &  \chef{Barack OBAMA}              \\ \hline
\end{tabular}
\footnotetext{Au Royaume-Uni, le chef du gouvernement est le \emph{Premier ministre}.}

De nombreux packages étendent nos possibilités en termes de composition de tableaux. Du simple array, au beaucoup plus complet booktabs ou encore tabu. Il y en a plein, et c’est plutôt dur de se repérer à ce sujet. Là encore, il ne faut pas hésiter à regarder les différents avis sur ces packages, voir lesquels fonctionnent ensemble, etc.

Texte préformaté

Un texte préformaté est un texte qui doit apparaître tel qu’il a été saisi, c’est-à-dire que rien ne sera interprété. Les commandes seront affichés, tous les espaces seront affichés, etc. Il peut être utile pour présenter du code par exemple. Traditionnellement, le texte préformaté est dans une police à chasse fixe.

Pour écrire du texte préformaté avec LaTeX, nous pouvons utiliser l’environnement \verbatim.

\begin{verbatim}
Dans l’environnement verbatim,   rien n’est interprété. On peut même écrire 
n’importe quelle commande sans problème.
\begin 
\end{verbatim}

En compilant ce code, on obtient bien le résultat voulu.

La commande \verb

Si on veut placer du texte préformaté dans du texte, on ne peut pas utiliser l’environnement verbatim. On va utiliser la commande \verb. Elle prend en paramètre le texte que l’on veut afficher, mais le paramètre n’est pas entre accolades, mais est entouré d’un même caractère. On peut choisir n’importe quel caractère qui n’apparaît pas dans le texte passé en paramètre.

En LaTeX, on obtient une section avec la commande \verb|section|.

Notons que la commande \verb ne peut pas être utilisée dans l’argument d’un commande. Par exemple, écrire \section{\verb|S|} nous donnera l’erreur « LaTeX Error: \verb illegal in command argument ».

Pour bénéficier de plus de fonctionnalités (dont la coloration syntaxique), nous pourrons nous renseigner sur les packages qui permettent l’affichage de code dans un document. Notons particulièrement les packages listings et minted, le dernier étant présenté dans ce tutoriel. Pour afficher des algorithmes, nous pourrons par exemple regarder le package algorithmic.


Avec ce chapitre, nous avons de quoi faire des documents beaucoup plus complets. Mais nous n’en avons pas encore fini avec la gestion de ces différents éléments. En effet, en LaTeX, on parle souvent de flottants et de figures, et c’est un aspect qu’il nous reste à aborder… Dans un prochain chapitre.