Aller au contenu

Ecrire un rapport, des slides, un poster avec LaTeX ou Quarto

Vous avez besoin d'écrire un rapport, de produire des planches, de réaliser un poster ? Il existe pleins d'outils libres pour le faire. Ici, on propose de discuter de LaTex et de Quarto. Il y a également toute la suite d'outils LibreOffice avec le logiciel de traitement de texte Writer, l'outil de production de présentation Impress que vous pourrez découvrir au travers des guides https://books.libreoffice.org/fr/. La suite LibreOffice n'est pas détaillée dans cette page parce que je la connais moins que LaTeX et Quarto mais ça n'en reste pas moins des outils libres de très bonne qualité, tout à fait recommendables 😊.

LaTeX

LaTeX est avant tout un langage dont la philosophie est de se concentrer sur le contenu ("saisir du texte au kilomètre") sans se soucier de la forme. La forme est prise en main une bonne foi pour toutes par quelques définitions placées dans le préambule du document pour, qu'ensuite, on ne s'en soucie plus.

LaTex est très utilisé dans la communauté scientifique, énormément de revues et conférences fournissent des feuilles de style LaTeX pour respecter leur format d'édition. LaTeX est clairement déroutant et peut paraître compliqué au premier abord mais le jeu en vaut la chandelle. Pour ne citer que quelques uns des points forts du langage :

  • vous obtenez un style uniforme à travers tout le document : qui ne s'est pas retrouvé avec des intelignes variables dans un document et ne pas réussir à trouver le bouton sur lequel cliquer pour ajuster ça ?
  • vous obtenez facilement une table des matières et de manière générale des références vers les images, tables, pages, etc.. pour très peu d'efforts,
  • vous disposez d'une édition textuelle des formules mathématiques : je vous met au défis d'aller plus vite à taper des équations avec l'éditeur visuel de Word/LibreOffice que de saisir l'équation en texte dans un document LaTeX,
  • vous pouvez saisir directement des graphiques en texte avec Tikz (voir Le tutoriel proposé par Overleaf, le livre Tikz pour l'impatient).

Alors, je vous le concède, on peut "bien utiliser" des logiciels comme LibreOffice/Word pour s'assurer que les problèmes de style non uniforme à travers le document n'exsitent pas, mais si vous êtez aussi mauvais que moi avec ces outils, alors ça vaut le coup d'essayer LaTex.

Pour disposer de feuilles de styles prédéfinies, voici quelques ressources :

Ecosystème

LaTex est un langage et il existe plusieurs outils dans l'écosystème pour utiliser ce langage. Mais commençons d'abord par regarder un exemple basique de document LaTex, ici tiré du Wikibooks sur LaTeX :

Note

Document ex1.tex

\documentclass[11pt,a4paper]{report}

\usepackage[utf8]{inputenc}

\begin{document}

\title{How to Structure a LaTeX Document}
\author{Andrew Roberts}
\date{December 2026}

\maketitle

\end{document}

On ne détaillera pas la syntaxe latex, on illustrera juste quelques éléments de syntaxe un peu plus loin pour donner une idée de quelques possibilités offertes par LaTex. Comme dit précédemment, LaTeX est un langage et pour l'utiliser, il faut forcément apprendre sa syntaxe. Le Wikibooks sur LaTeX disponible sur https://en.wikibooks.org/wiki/LaTeX est une des ressources disponibles pour l'apprendre.

Compilation en local

Pour le moment, ce n'est qu'un fichier texte. Pour le transformer en pdf, il faut utiliser un compilateur. Il existe plusieurs compilateurs : latex (et la chaîne dvips/dvipdf), pdflatex, latexmk, ... ; Prenons l'exemple de latexmk, qui s'installe sur une debian avec apt install latexmk :

latexmk -pdf ex1.tex

va produire le document pdf visualisé ci-dessous :

Document latex transformé en pdf

Une des fonctionnalités très intéressantes de latexmk est la compilation en continue avec l'option -pvc

latexmk -pvc -pdf ex1.tex

ce qui vous permet de compiler le document en tâche de fond, pendant que vous êtes entrain de l'éditer, à combiner avec un programme de visualisation du rendu : evince ex1.pdf.

Pour terminer cette partie sur la compilation en local, vous trouverez également des outils "clique boutons" WYSIWYG pour éditer des documents LaTeX comme TexStudio, TexMaker ou bien encore des plugins comme LaTeX workshop pour VSCode.

Compilation en ligne

Il existe également des plateformes en ligne pour produire des documents LaTeX. Probablement la plus connue est overleaf, qui est à la fois le nom de l'outil en license AGPL dont le code source est disponible sur https://github.com/overleaf/overleaf et le nom de l'instance en ligne accessible via https://www.overleaf.com. Cette plateforme permet l'édition collaborative de documents LaTeX et offre des ressources pour compiler vos documents avec un compilateur et des packages supplémentaires pré-installés. Il est possible de disposer d'un compte gratuit sur overleaf mais ne permettant pas d'accéder à toutes les fonctionnalités (e.g. synchronisation avec GIT, limite dans le nombre de partage).

Notez que comme c'est un outil libre, vous pouvez déployer votre propre instance de serveur overleaf, en vision community, en utilisant le Toolkit Overleaf. Le laboratoire de Math PLM auto-héberge par exemple une instance overleaf, qu'ils mettent à disposition de la communauté des chercheurs des laboratoires Français sur https://plmlatex.math.cnrs.fr.

Quelques éléments de syntaxe LaTex

Le document ci-dessous illustre quelques éléments de syntaxe LaTeX, dans lequel nous définissions des références bibliographiques dans le fichier compagnon biblio.bib. Le rendu avec latexmk produit le PDF ci-dessous :

Document latex transformé en pdf pour illutrer les références bibliographiques, équations mathématiques, références croisées.

Note

Document ex2.tex

\documentclass[11pt,a4paper]{article}

% Quelques packages pour disposer d'éléments traduits en Français comme "Table des matières", "Références", etc..
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}

\usepackage[dvipsnames]{xcolor}
\usepackage{hyperref}
\hypersetup{
    colorlinks=true,
    linkcolor=NavyBlue,     % Liens internes (sections, équations)
    filecolor=magenta,      % Liens de fichiers
    urlcolor=NavyBlue,      % Adresses web
    citecolor=Maroon        % Références bibliographiques
}

% Pour disposer d'un texte arbitraire
\usepackage{lipsum}

\usepackage{amssymb}
\usepackage{amsmath}

\begin{document}

\title{LaTeX document showcase}
\author{Jérémy Fix}

\maketitle

\tableofcontents

\pagebreak
\section{Introduction}

Ce document n'a pas une très grande prétention, on souhaite simplement illustrer quelques \textbf{éléments de syntaxe} de \LaTeX. En particulier :

\begin{itemize}
\item la table des matières "offerte" par un simple appel à \verb|\tableofcontents|,
\item les équations que l'on peut directement saisir en texte, ainsi que nous l'illustrons dans la section~\ref{sec:math} de la page \pageref{sec:math}
\item les références croisées que ce soit aux sections, aux figures, aux tables, à des entrées bibliographiques, etc...
\end{itemize}

Un document peut disposer des sections, sous-sections, sous-sous-sections, etc.. définies à l'aide des commandes \verb|\section|, \verb|\subsection|, ... Certains types de document (e.g. article, book, report, ..) offrent d'autres catégories de section comme \verb|\part|, ou encore \verb|\chapter|.


\subsection{Sous-section de l'intro}

\lipsum[5-6]

\section{Des mathématiques faciles à écrire}
\label{sec:math}

Pour illustrer la simplicité d'écriture d'équations mathématiques avec \LaTeX, on reproduit ci-dessous les équations que certains mathématiciens ont trouvé les plus jolies :

\begin{equation}
\sum_{n=1}^{\infty} \frac{1}{n} = \prod_{p\mbox{ prime}} \frac{1}{1 - \frac{1}{p}}
\end{equation}

Les équations \ref{eq:maxwell_1}-\ref{eq:maxwell_2} sont les équations de Maxwell de l'électromagnétisme.

\begin{align}
\label{eq:maxwell_1} \nabla \cdot B &= 0 &\mbox{Maxwell-Thomson}\\
\nabla \cdot E &= \rho &\mbox{Maxwell-Gauss}\\
\nabla \wedge E &= - \frac{\partial B}{\partial t} &\mbox{Maxwell-Faraday}\\
\label{eq:maxwell_2}\nabla \wedge B &= \frac{\partial E}{\partial t} + J &\mbox{Maxwell-Ampère}
\end{align}

L'équation \ref{eq:shannon} est la formule de l'entropie de Shannon qu'il a introduite dans~\cite{Shannon1948}:

\begin{equation}
\label{eq:shannon} H = -\sum_{i=0}^{n-1} p_i \log_2(p_i)
\end{equation}

L'équation \ref{eq:dnf} est l'équation des champs neuronaux dynamiques étudiée par Amari dans \cite{Amari1977}:

\begin{eqnarray}
\label{eq:dnf}\tau \frac{\partial u}{dt}(x,t) &=& -\alpha u(x,t) = \int_y f(u(y,t)) w(x, y) + h(x, t) \\
w(x,y) &=& A_+ \exp(-\frac{\|x-y\|_2^2}{2\sigma_+^2}) - A_- \exp(-\frac{\|x-y\|_2^2}{2\sigma_-^2})
\end{eqnarray}

\bibliographystyle{apalike}
\bibliography{biblio.bib}

\end{document}

Document biblio.bib

@article{Shannon1948,
author = {Shannon, C. E.},
title = {A Mathematical Theory of Communication},
journal = {Bell System Technical Journal},
volume = {27},
number = {3},
pages = {379-423},
doi = {https://doi.org/10.1002/j.1538-7305.1948.tb01338.x},
url = {https://onlinelibrary.wiley.com/doi/abs/10.1002/j.1538-7305.1948.tb01338.x},
eprint = {https://onlinelibrary.wiley.com/doi/pdf/10.1002/j.1538-7305.1948.tb01338.x},
year = {1948}
}

@article{Amari1977,
  title = {Dynamics of {{Pattern Formation}} in {{Lateral-Inhibition Type Neural Fields}}},
  author = {Amari, Shun-Ichi},
  year = {1977},
  journal = {Biological Cybernetics},
  volume = {27},
  number = {2},
  pages = {77--87},
  doi = {10.1007/BF00337259}
}

Slides et posters avec Beamer

Dans l'écosystème LaTeX, il existe l'ensemble de classes prédéfinies de beamer qui permet de produire des supports de présentation, ou des posters. Très pratique, ce package introduit un environnement frame pour créer chacune des planches. Les planches peuvent être personnalisées et vous trouverez plusieurs styles sur https://www.overleaf.com/gallery/tagged/beamer. Par exemple, le style "Cookie Beamer" (https://www.overleaf.com/latex/templates/cookie-beamer-theme/rxvdmmffdccd)) est assez élégant, je trouve.

A titre d'illustration, le code LaTeX ci-dessous :

\begin{frame}{Navigation stays visible}{Long titles and subtitles fit the header}
  \begin{columns}[T,onlytextwidth]
    \column{.58\textwidth}
      \begin{itemize}
        \item The rail shows the current section, or section.subsection when needed.
        \item The footer keeps author, title, section, and frame count out of the slide body.
        \item Section pages mark turns in the talk without adding clutter to every frame.
      \end{itemize}

    \column{.36\textwidth}
      \begin{tikzpicture}[node distance=5mm]
        \node[cookie accent node,minimum width=3.6cm] (a) {Section};
        \node[cookie node,below=of a,minimum width=3.6cm] (b) {Subsection};
        \node[cookie node,below=of b,minimum width=3.6cm] (c) {Frame};
        \draw[cookie arrow] (a) -- (b);
        \draw[cookie arrow] (b) -- (c);
      \end{tikzpicture}
  \end{columns}
  \note{
    This frame intentionally uses a long title and a subtitle. The title area
    should grow without colliding with the divider.
  }
\end{frame}

produit la planche ci-dessous :

Planche d'une collection de planches produites avec le style Cookie Beamer.

Vous pouvez directement récupérer les sources du document LaTeX/Beamer sur la page du style Cookie https://www.overleaf.com/latex/templates/cookie-beamer-theme/rxvdmmffdccd.

Il est également possible de produire des posters avec Beamer. La collection de style beamer latex-beamerposter disponible sur https://github.com/deselaers/latex-beamerposter/ permet de produire des posters.

Exemple de poster produit avec le style beamer latex-beamerposter.

Il existe bien d'autres styles, listés sur la page d'overleaf : https://www.overleaf.com/gallery/tagged/poster.

Quarto (markdown)

Dans la section précédente, on a disucté de la production de supports (rapport, slides, poster) avec LaTeX. Le résultat est de très bonne qualité mais la syntaxe n'est pas toujours facile à prendre en main. Ces dernières années, d'autres langages sont popularisés pour produire des rapports/slides/poster, par exemple le restructuredText, le markdown, typest, etc... et il existe maintenant des outils qui permettent de convertir des documents en ces langages en rapports/slides/poster.

En particulier, on peut évoquer l'écriture de supports en Markdown et leur transformation en PDF ou HTML avec Quarto.

Comme LaTeX, Markdown est un langage avec sa syntaxe, en fait, avec ses syntaxes. John Gruber (avec l'inspiration de Aaron Swartz, "The Internet's Own Boy" 🙏) a introduit la base du langage markdown et la syntaxe qu'il a proposé est disponible sur https://daringfireball.net/projects/markdown/syntax. Cependant, tout n'est pas spécifié dans la version de John Gruber et il existe donc plusieurs variantes comme la "Github Flavored Markdown" (GFM) ou la version de pandoc (https://pandoc.org/MANUAL.html#pandocs-markdown). Quarto repose sur pandoc dans sa chaîne de compilation et utilise donc la syntaxe Markdown de Pandoc.

Pour illustrer la syntaxe Pandoc markdown, regardons un des exemples offert par Quarto et disponible sur https://github.com/quarto-dev/quarto-gallery/blob/main/page-layout/tufte.qmd :

<header passé pour le moment>

# Introduction

This document demonstrates the use of a number of advanced page layout features to produce an attractive and usable document inspired by the Tufte handout style and the use of Tufte's styles in RMarkdown documents [@xie2018]. The Tufte handout style is a style that Edward Tufte uses in his books and handouts. Tufte's style is known for its extensive use of sidenotes, tight integration of graphics with text, and well-set typography. Quarto[^1] supports most of the layout techniques that are used in the Tufte handout style for both HTML and LaTeX/PDF output.

[^1]: To learn more, you can read more about [Quarto](https://www.quarto.org) or visit [Quarto's Github repository](https://www.github.com/quarto-dev/quarto-cli).

``` yaml
---
title: "An Example Using the Tufte Style"
author: "John Smith"
format:
  html:
    grid:
      margin-width: 350px         # <1>
  pdf: default
reference-location: margin        # <2>
citation-location: margin         # <2>
---
```

1.  Increases the width of the margin to make more room for sidenotes and margin figures (HTML only).
2.  Places footnotes and cited sources in the margin. Other layout options (for example placing a figure in the margin) will be set per element in examples below.

These layout features are designed with two important goals in mind:

1.  To produce both PDF and HTML output with similar styles from the same Quarto document;
2.  To provide simple syntax to write elements of the Tufte style such as side notes and margin figures. If you'd like a figure placed in the margin, just set the option `fig-column: margin` for your code chunk, and we will take care of the details for you[^2].

[^2]: You never need to think about `\begin{marginfigure}` or `<span class="marginfigure">`; the LaTeX and HTML code under the hood may be complicated, but you never need to learn or write such code.

If you have any feature requests or find bugs in these capabilities, please do not hesitate to file them to <https://github.com/quarto-dev/quarto-cli/issues>.

# Figures

## Margin Figures

Images and graphics play an integral role in Tufte's work. To place figures in the margin you can use the **Quarto** chunk option `column: margin`. For example:

```{r}
#| label: fig-margin
#| fig-cap: "MPG vs horsepower, colored by transmission."
#| column: margin
#| message: false
library(ggplot2)
mtcars2 <- mtcars
mtcars2$am <- factor(
  mtcars$am, labels = c('automatic', 'manual')
)
ggplot(mtcars2, aes(hp, mpg, color = am)) +
  geom_point() + geom_smooth() +
  theme(legend.position = 'bottom')
```

Note the use of the `fig-cap` chunk option to provide a figure caption. You can adjust the proportions of figures using the `fig-width` and `fig-height` chunk options. These are specified in inches, and will be automatically scaled down to fit within the handout margin.

On trouve ici des marqueurs de section (#), sous-sections (##), des listes numérotées, du texte en gras **Quarto**, des notes de bas de page. Il est possible d'inclure des figures, d'ajouter des références bibliographiques. Il est même possible de produire du contenu généré à la volée par l'exécution de code python ou R. Le code R du document ci-dessus produit l'illustration ci-dessous. Je trouve cette fonctionnalité super intéressante.

Une figure peut être produite par du code inséré dans le code markdown d'un document traité par Quarto.

Avec Quarto, il est également possible de convertir vos documents markdown en présentation. A ce sujet, je vous invite à lire la documentation en ligne sur https://quarto.org/docs/presentations/. Il est par exemple possible de convertir le document markdown en slides revealjs interactifs que l'on peut diffuser en ligne.