Apprendre LaTeX : afficher et coloriser du code source
par Damien Mégy latex verbatim tcolorbox listings verbatim minted pygments
Table des matières
Cet aide-mémoire présente les principaux outils disponibles pour inclure du code informatique dans un document LaTeX : les packages verbatim, fancyvrb, listings, minted, éventuellement en tandem avec tcolorbox. (Comme beaucoup d'autres billets de ce blog, il est avant tout destiné à l'auteur lui-même, qui doit réapprendre l'utilisation de ces packages environ une fois par an au moment de taper des notes de cours ou des sujets d'examen.)
L'environnement natif verbatim
L'environnement verbatim est le plus basique pour afficher du code dans LaTeX. Il permet d’insérer du texte brut, sans interprétation des caractères spéciaux.
Il est disponible nativement sans package supplémentaire.
Le package verbatim
Ce package fournit un environnement étoilé \begin{verbatim*} qui affiche les espaces et les tabulations. Il permet aussi d'inclure un fichier externe avec \verbatiminput{filename}. Enfin, il permet de définir un style global pour l'affichage de tous les environnements verbatim. Il est aussi nécessaire pour certains packages comme fancyvrb présentés plus bas.
Utilisation
\begin{verbatim}
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
\end{verbatim}
s de numérotation des lignes, pas de personnalisation avancée.
Le package fancyvrb
fancyvrb est une extension de verbatim qui offre plus de flexibilité : numérotation des lignes, cadre autour du code, gestion des espaces, etc.
Utilisation
\usepackage{fancyvrb}
\begin{Verbatim}[numbers=left,frame=single]
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
\end{Verbatim}
Avantages
- Numérotation des lignes.
- Possibilité d’ajouter un cadre.
- Meilleure gestion des espaces et des tabulations.
Extensions
Le package fvextra permet d’étendre encore les fonctionnalités de fancyvrb.
Le package listings
Le package listings (page CTAN) est l’un des packages les plus populaires pour l’affichage de code. Il permet une personnalisation assez poussée : coloration syntaxique (basique), polices, styles, etc.
Utilisation
\usepackage{listings}
\lstset{
language=Java,
basicstyle=\ttfamily,
numbers=left,
frame=single,
breaklines=true
}
...
\begin{lstlisting}
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
\end{lstlisting}
Avantages
- Coloration syntaxique pour de nombreux langages.
- Numérotation des lignes et gestion des sauts de ligne.
- Très personnalisable.
Un problème avec le package listingsest qu'il ne prend pas en charge les caractères accentués. Or, il est courant d'avoir des commentaires avec des caractères unicode. Une solution est de préciser au package comment gérer ces caractères:
\lstset{literate=
{á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
{Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
{à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
{À}{{\`A}}1 {È}{{\`E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
{ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
{Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
{â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
{Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
{ã}{{\~a}}1 {ẽ}{{\~e}}1 {ĩ}{{\~i}}1 {õ}{{\~o}}1 {ũ}{{\~u}}1
{Ã}{{\~A}}1 {Ẽ}{{\~E}}1 {Ĩ}{{\~I}}1 {Õ}{{\~O}}1 {Ũ}{{\~U}}1
{œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
{ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
{ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {Ø}{{\O}}1 {å}{{\r a}}1 {Å}{{\r A}}1
{€}{{\euro}}1 {£}{{\pounds}}1 {«}{{\guillemotleft}}1
{»}{{\guillemotright}}1 {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1 {¡}{{!`}}1
}
Pour plus d'informations sur listings :
- documentation https://mirrors.ctan.org/macros/latex/contrib/listings/listings.pdf
- https://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings
Combinaison de listings avec tcolorbox
Pour un rendu encore plus soigné, on peut encapsuler un bloc lstlisting dans une tcolorbox, de la façon suivante :
\usepackage{tcolorbox}
\tcbuselibrary{listings}
\begin{tcblisting}{listing only,listing options={language=Java,numbers=left}}
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
\end{tcblisting}
Le nec plus ultra : minted
Le package minted (page CTAN, doc pdf) utilise le moteur de coloration syntaxique Pygments de Python.
Avantages :
- Coloration syntaxique très précise et moderne.
- Support d’un grand nombre de langages et de styles.
Inconvénients :
- Nécessite d’avoir Python et Pygments installés.
- Obligation de compiler avec l’option -shell-escape.
Utilisation
\usepackage{minted}
\begin{minted}{java}
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
\end{minted}
Installation de Pygments
Pygments utilise l'outil pygmentize de Pygments. On peut l'installer avec apt-get install python3-pygments sous linux, brew install pygments sous macOS et dieu sait comment sous Windows, peut-être pip install Pygments une fois que Python est installé.
Pour vérifier l'installation, on peut entrer pygmentize -Vdans un terminal et on doit normalement voir s'afficher quelque chose du genre suivant :
Pygments version 2.19.2, (c) 2006-2024 by Georg Brandl, Matthäus Chajdas and contributors.
Styles de coloration disponibles
La page https://pygments.org/styles/ répertorie les styles disponibles et on peut tester la coloration de son propre code à l'adresse https://pygments.org/demo/ en tapant son code dans un champ de texte ou en uploadant un fichier.

Utilisation avec tcolorbox
On peut aussi inclure les listings colorisés avec minteddans des tcolobox, comme pour listings.