Différents types de documents

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

\frontmatter

Prologue

Chiffres romains minuscules

Non présente

\mainmatter

Corps

Chiffres arabes

Chiffres arabes

\appendix

Annexe

Chiffres arabes

Lettres majuscules

\backmatter

Épilogue

Chiffres arabes

Non présente

Numérotation des différentes parties d’un document de la classe 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).

Exemples de slides avec Beamer
Exemples de slides (dépôt Github de 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.

\documentclass[a4paper, 12pt, french]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{subfiles}
\usepackage{babel}

\begin{document}
   \subfile{chapitre_1}
   \subfile{chapitre_2}
\end{document}
principal.tex.
\documentclass[principal.tex]{subfiles}
\begin{document}
   \chapter{Le premier chapitre}
      Son contenu.
\end{document}
chapitre_1.tex.
\documentclass[principal.tex]{subfiles}
\begin{document}
   \chapter{Le second chapitre}
      Son contenu.
\end{document}
chapitre_2.tex.

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.