Le dernier chapitre de cette section nous apprendra à créer d’autres types de documents. Nous apprendrons également à organiser nos sources LaTeX. Pour cela, nous verrons qu’il est possible d’écrire dans plusieurs fichiers plutôt que dans un seul.
Des classes pour de plus gros documents
En plus de la classe article
, LaTeX nous propose deux classes pour les documents « classiques ».
La classe book
Pour commencer, la classe book
, comme son nom l’indique, permet d’écrire des livres. Cette classe rajoute la commande \chapter
comme commande de sectionnement, les chapitres étant le niveau de sectionnement juste au dessus des sections et \chapter
a donc le poids 0. Les chapitres commencent sur une nouvelle page.
Les options de la classe article
sont toujours valides pour la classe book
. Notons cependant que par défaut c’est l’option titlepage
qui est présente pour la classe book
.
De plus, nous pouvons demander que les nouveaux chapitres commencent toujours sur une page impaire (c’est ce qui est fait dans beaucoup de livres ; les chapitres commencent sur la page de droite). Pour cela, nous utiliserons l’option openright
, l’option par défaut étant openany
qui permet aux chapitres de commencer sur n’importe quelle page.
\documentclass[a4paper, 12pt, openright, french]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\begin{document}
\chapter{Le premier}
\section{Une section}
\chapter{Un autre}
\section{Une section}
\subsection{Une sous-section}
\end{document}
Structure du document
De plus, la classe book
vient avec trois commandes (en plus de la commande \appendix
) pour structurer encore plus notre document en lui donnant un prologue, un corps et un épilogue. Ces commandes modifient le type de numérotation des pages et des chapitres de la manière suivante.
Commande | Utilisation | Numérotation des pages | Numérotation des chapitres |
| Prologue | Chiffres romains minuscules | Non présente |
| Corps | Chiffres arabes | Chiffres arabes |
| Annexe | Chiffres arabes | Lettres majuscules |
| Épilogue | Chiffres arabes | Non présente |
book
.Un exemple aidera à s’en faire une meilleure idée.
\documentclass[a4paper, 12pt, french]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\title{Exemple de livre}
\author{ZdS}
\begin{document}
\maketitle
\tableofcontents
\frontmatter
\chapter{Prologue}
\mainmatter
\chapter{Chapitre}
\section{Section}
\appendix
\chapter{Annexe}
\section{Section d'annexe}
\backmatter
\chapter{Épilogue}
\end{document}
On remarque de plus que la numérotation recommence de zéro quand on utilise la commande \mainmatter
.
La classe report
Finalement, pour rédiger un rapport, nous pouvons utiliser la classe report
. Cette commande rajoute une autre commande de sectionnement (encore une), la commande \part
, qui est un niveau au dessus des chapitres (et a donc un poids de -1).
La classe report
a les mêmes options que la classe article
. En particulier, il n’y a pas d’option openright
pour avoir les débuts de chapitres sur des pages impaires. La différence majeure est que l’option par défaut pour le titre est titlepage
.
De plus nous n’avons pas accès aux commandes \frontmatter
, \mainmatter
et \backmatter
avec la classe report
.
Finalement, la classe report
ressemble beaucoup à une classe article
avec deux commandes de sectionnement supplémentaires (\chapter
et \part
).
\documentclass[a4paper, 12pt, french]{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\title{Exemple de rapport}
\author{ZdS}
\begin{document}
\maketitle
\tableofcontents
\part{Partie}
\chapter{Chapitre}
\section{Section}
\part{Autre partie}
\chapter{Autre chapitre}
\section{Autre section}
\end{document}
Notons que la numérotation des chapitres ne repart pas de zéro quand on change de partie. Ce comportement peut être changé, nous verrons cela dans la partie suivante.
D'autres types de documents
En plus d’écrire des documents « textuels » dirons-nous, LaTeX nous permet d’écrire pleins d’autres types de documents. Nous allons donc voir d’autres types de documents qui sont offerts par les classes standards de LaTeX.
Des lettres
Pour ceux qui veulent écrire des lettres, LateX peut également le faire et propose une classe standard, letter
, qui permettra de placer les éléments comme l’adresse ou encore la signature de l’expéditeur. Mais cette classe place les éléments en suivant les conventions anglaises. Pour suivre les conventions françaises, nous allons plutôt utiliser la classe lettre
.
L’élément principal de cette classe est l’environnement letter
dans lequel nous écrivons notre lettre. Nous pouvons ainsi écrire plusieurs lettres dans un seul document en utilisant plusieurs fois cet environnement. Il prend en paramètre le nom du destinataire de la lettre. À l’intérieur de cet environnement, on écrit notre lettre en trois parties principales.
- Les salutations, avec la commande
\opening
qui prend en paramètre… Les salutations. - Le corps de la lettre.
- La formule de politesse avec la commande
\closing
qui prend un paramètre.
On a alors quelque chose du genre. Remarquons que LaTeX ajoute la date du jour automatiquement.
\documentclass[a4paper, 12pt, french]{letter}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\begin{document}
\begin{letter}{Destinaire 1}
\opening{Cher}
Une première lettre
\closing{Meilleurs voeux,}
\end{letter}
\begin{letter}{Destinataire 2}
\opening{Madame, monsieur}
Une première lettre
\closing{Respectueusement,}
\end{letter}
\end{document}
Les salutations et la formule de politesse ne sont bien sûr pas obligatoires. En plus de ces commandes, nous avons les commandes suivantes.
\name
pour préciser le nom de l’expéditeur.\address
pour son adresse.\telephone
pour son numéro de téléphone.\date
pour préciser la date.\ps
pour rajouter des post-scriptum (elle prend deux paramètres, le label à afficher, et le texte à afficher).\cc
pour indiquer les personnes en copie de la lettre.\encl
pour préciser les pièces jointes à la lettre
Nous avons donc de quoi écrire une vraie lettre plutôt facilement. Et il y en a quelques autres de plus. Les commandes \name
, \address
, \date
et \telephone
sont généralement utilisées dans le préambule, \ps
, \cc
et \encl
là où on veut les voir apparaître.
\documentclass[a4paper, 12pt, french]{lettre}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\name{Karnaj}
\address{Tout}
\date{\today}
\begin{document}
\begin{letter}{Destinataires}
\opening{À tous,}
Bonne année
\closing{Meilleurs voeux,}
\ps{PS :}{que la force soit avec vous}
\ps{PS 2:}{Geronimo}
\cc{Tout le monde}
\encl{Des chocolats}
\end{letter}
\end{document}
Ce tutoriel nous permettra d’en apprendre plus sur la classe lettre
.
Des présentations
LaTeX permet aussi de faire des présentations avec la classe standard slides
. Néanmoins, la classe slides
n’offre pas beaucoup de possibilités simples et est donc beaucoup moins utilisée que des classes plus complètes. C’est pourquoi nous n’allons pas la voir ici.
Pour faire des présentations, nous pouvons regarder la classe beamer
qui est très bien documentée ; de nombreux tutoriels à son sujet sont trouvables sur Internet. Voici un exemple de ce qu’elle permet de faire (ici quatre slides faites avec le thème Metropolis).
Sur le dépôt, nous trouvons également un exemple de présentation. Nous pouvons déjà, si nous le souhaitons, regarder comment faire des présentations ; nous avons désormais les compétences pour cela. Néanmoins, certains des chapitres suivants, par exemple sur l’inclusion de tableaux et d’images pourront être utiles avant cela.
Et ce n’est pas tout, il est également possible de faire d’autres types de document avec LaTeX ! Des affiches avec baposter
ou encore modernposter
, des CVs avec des classes comme moderncv
, etc. En fait il y a des classes pour faire à peu près tout (mais pas le café).
Organiser ses fichiers
Lorsque nous écrivons un grand document, ce n’est pas très agréable d’avoir tout le code dans un même document et on peut se perdre dans le fichier source très facilement. Nous avons la possibilité d’inclure des fichiers dans d’autres, et c’est cette possibilité que nous allons utiliser.
Structurer notre projet
Notre but est alors d’écrire dans plusieurs fichiers, voire même dans plusieurs dossiers. Cela permettrait d’avoir un fichier par section (ou même par sous-section), et donc d’être beaucoup mieux organisé. Nous aurions alors un fichier général qui inclut les autres fichiers. Par exemple, nous pourrions avoir une arborescence de ce type.
conclusion.tex
introduction.tex
projet.tex
section_1/
section1.tex
sous_section1.tex
sous_section2.tex
section_2/
section2.tex
sous_section1.tex
sous_section2.tex
sous_section3.tex
Cela permet alors d’avoir le sectionnement représenté dans l’arborescence de notre projet. Le fichier projet.tex
est le fichier principal du projet. C’est dans ce fichier que nous aurons notre préambule, notre \begin{document}
et notre \end{document}
. Il inclut l’introduction, la conclusion et les fichiers section1.tex
et section2.tex
. Les fichiers section1.tex
et section2.tex
, eux, incluent les fichiers associés à leurs sous-sections respectives.
La commandes \input
Pour inclure un fichier dans un autre, nous pouvons utiliser la commande \input
qui prend en paramètre le chemin du fichier à inclure. En gros, elle va prendre le contenu de ce fichier à la place du \input
. Par exemple, on peut avoir un fichier section.tex
et le fichier principal projet.tex
.
% Le fichier section.tex
\section{Une section}
% le fichier projet.tex
%préambule
\begin{document}
\input{section}
\end{document}
Ici, nous n’avons pas mis l’extension .tex
du fichier, elle n’est pas obligatoire puisque LaTeX cherche par défaut un fichier avec l’extension .tex
. Néanmoins, si nous voulons inclure un fichier avec une autre extension (c’est possible), il faudra préciser cette dernière.
La commande \input
fait littéralement un copier-coller ; elle ne compile pas le fichier pour ensuite prendre son résultat. Cela signifie par exemple que le code qui suit ne marche pas (on garde le même fichier section.tex
que plus haut).
\begin{document}
\section{\input{section}}
\end{document}
En effet, on ne peut pas déclarer une section dans une section.
La commande include
À côté de la commande \input
se trouve la commande \include
qui prend elle aussi le nom d’un fichier (notons qu’avec cette commande, il ne faut pas mettre l’extension du fichier). Elle permet elle aussi d’inclure le contenu du fichier dans, mais a néanmoins quelques différences avec la commande \input
.
Premièrement, et c’est la différence la plus visible, la commande \include
commence une nouvelle page avant d’inclure le fichier et en commence une autre après avoir inclus le fichier. Par exemple, elle est idéale pour les chapitre de livres, alors que pour des sections on préférerait sûrement utiliser \input
.
De plus, un document qui est inclus avec la commande \include
ne peut pas utiliser lui même une commande \include
, ceci mènera à une erreur. On ne peut pas imbriquer les \include
.
%fichier chap.tex
\chapter{Chapitre}
\include{section}
%fichier projet.tex
\maketitle
\include{chapitre}
Avec ce code nous obtenons l’erreur \include cannot be nested
.
Au contraire, nous pouvons imbriquer des \input
comme nous le voulons. En remplaçant les \include
du code précédent par des input
, nous n’avons plus d’erreur.
La commande \include
semble quand même plutôt limitée comparée à \input
, pourquoi utiliser \include
?
Comme d’habitude il nous faut utiliser la commande adaptée à ce que l’on veut faire. Nous avons par exemple dit plus haut que \include
pouvait être plus adaptée à l’inclusion de chapitres.
La commande \includeonly
La commande \include
a un avantage qui est la commande \includeonly
. Cette commande, qui ne peut être utilisée que dans le préambule, permet d’indiquer à LaTeX les fichiers à inclure. Elle prend en paramètre les noms des fichiers, séparés par une virgule.
\includeonly{chapitre_3, chapitre_4}
\begin{document}
\include{chapitre_1}
\include{chapitre_2}
\include{chapitre_3}
\include{chapitre_4}
\end{document}
Ici, seuls les fichiers chapitre_3.tex
et chapitre_4.tex
seront inclus. Cela permet d’accélérer la compilation et est donc utile si nous avons de très gros documents. Imaginons par exemple un livre de quatre chapitres. Une fois que les chapitres un et deux sont rédigés et ne seront plus changés, ce n’est plus la peine de les compiler pendant qu’on travaille sur les chapitres trois et quatre ; la commande \includeonly
permet d’éviter de le faire.
Le package subfiles
Des packages comme subfiles que nous allons voir ici permettent de séparer notre code dans plusieurs fichiers et proposent des fonctionnalités supplémentaires. Avec subfiles, nous allons être capable de compiler chaque fichier indépendamment, chaque sous-fichier utilisant le préambule du fichier principal.
À quoi ça peut servir ?
Si nous écrivons un gros document de plusieurs chapitres, cela nous permet — si chaque chapitre est dans un document — d’obtenir un PDF pour le document complet, mais aussi des PDFs pour chaque chapitre.
L’utilisation de subfiles n’est pas très compliquée. Nous chargeons le package dans le fichier principal, et pour inclure les sous-fichiers nous n’allons pas utiliser \input
ou \include
, mais \subfile
.
La grande différence se situe dans le contenu des sous-fichiers. Ceux-ci deviennent des documents LaTeX « complets » dans le sens où ils commencent par un \documentclass
et ont un environnement document
. En fait, ils sont de la forme suivante.
\documentclass[principal.tex]{subfiles}
\begin{document}
% Contenu
\end{document}
Les sous-documents peuvent alors être compilé seuls ; ils utiliseront les packages et le préambule du document principal (dans notre exemple, principal.tex
). Finalement, on peut avoir cet exemple.
En compilant principal.tex
nous obtenons le fichier principal avec les deux chapitres, en compilant chapitre_1.tex
, nous obtenons un fichier avec juste le premier chapitre (le préambule utilisé étant celui du fichier principal), et de même la compilation de chapitre_2.tex
produit un fichier avec juste le second chapitre.
Grâce à ce chapitre, nous avons quelques cordes supplémentaires à notre arc de TeXnicien. Nous pouvons maintenant mieux gérer nos projets et nous avons une plus grande diversité de projets possibles.