---
myst:
html_meta:
keywords: LaTeX, langages de programmation, mise en forme de code, coloration syntaxique, formater un programme,formater du code, verbatim, insérer du code-source, listing informatique, listings, listing"
---
# Comment présenter du code informatique avec le package ?
Le package est un des packages les plus aboutis pour mettre en page du
code informatique. Ce n’est pas le plus puissant, mais il est le plus immédiat à utiliser.
Pour les autres solutions on pourra se référer à [](/4_domaines_specialises/informatique/inserer_du_code_source_informatique.md)
:::{important}
est à charger **après**
:::
## L’environnement `lstlisting`
### Premier exemple
La syntaxe de base est la suivante :
```{noedit}
\begin{lstlisting}[⟨options⟩]
⟨bloc de code⟩
\end{lstlisting}
```
```
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[language=python]
# Une boucle
for i in range(0,5):
print(i)
# Une autre boucle
while i != "4":
print("Encore un tour !")
\end{lstlisting}
\end{document}
```
:::{note}
Le seul argument optionnel utilisé dans cet exemple indique le language utilisé. Sans
cette précision, les mots clefs ne seraient pas mis en gras, les commentaires ne
seraient pas en italique et les espaces dans les chaînes de caractères ne
seraient pas matérialisés.
:::
### Amélioration de la présentation avec quelques options.
L’exemple précédent est très sommaire et on peut bien sûr améliorer le rendu avec quelques
options.
```
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{babel}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[
basicstyle = \ttfamily,
language = python,
frame = single,
keywordstyle = \color{green!60!black},
keywordstyle = {[2]\color{orange}},
commentstyle = \color{gray}\itshape,
stringstyle = \color{blue},
showstringspaces = false,
numbers = left,
numberstyle = \tiny,
stepnumber = 1,
numbersep = 15pt
]
# Une boucle
for i in range(0,5):
print(i)
# Une autre boucle
while i != "4":
print("Encore un tour !")
\end{lstlisting}
\end{document}
```
:::{note}
Dans cet exemple, on utilise aussi le package , pour la gestion des couleurs.
:::
## Réglage général des options
Pour ne pas avoir à réécrire les options à chaque fois, fournit la
commande ```\lstset{⟨options⟩}```.
Cette commande est à placer dans le préambule. Les options choisies s’appliqueront à
l’ensemble du document.
```
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{babel}
\usepackage{listings}
\lstset{
basicstyle = \ttfamily,
language = python,
frame = single,
keywordstyle = \color{green!60!black},
keywordstyle = {[2]\color{orange}},
commentstyle = \color{gray}\itshape,
stringstyle = \color{blue},
showstringspaces = false,
numbers = left,
numberstyle = \tiny,
stepnumber = 1,
numbersep = 15pt
}
\begin{document}
\begin{lstlisting}
# Une boucle
for i in range(0,5):
print(i)
# Une autre boucle
while i != "4":
print("Encore un tour !")
\end{lstlisting}
\end{document}
```
## Stockage du code dans un fichier externe
Il est en général plus pratique de stocker le code informatique dans un fichier
externe et de l'insérer dans le fichier `.tex`. Ceci se fait au moyen de la
commande `\lstinputlisting` dont la syntaxe est :
```{noedit}
\lstinputlisting[⟨options⟩]{⟨nom du fichier externe⟩}
```
```
% Code particulier pour rendre l'exemple observable dans la FAQ
\begin{filecontents}[force,noheader]{mon_fichier_python.py}
# Une boucle
for i in range(0,5):
print(i)
# Une autre boucle
while i != "4":
print("Encore un tour !")
\end{filecontents}
% Fin du code particulier
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{babel}
\usepackage{listings}
\lstset{
basicstyle = \ttfamily,
language = python,
frame = single,
keywordstyle = \color{green!60!black},
keywordstyle = {[2]\color{orange}},
commentstyle = \color{gray}\itshape,
stringstyle = \color{blue},
showstringspaces = false,
numbers = left,
numberstyle = \tiny,
stepnumber = 1,
numbersep = 15pt
}
\begin{document}
\lstinputlisting{mon_fichier_python.py}
\end{document}
```
## Problème des accents avec le moteur `pdflatex`
Des caractères accentués sont susceptibles de se trouver dans des codes
informatiques, notamment en commentaires. Avec le package ,
ils ne posent pas de problème lorsqu'on compile avec `xelatex` ou avec
`lualatex` mais ils font en revanche par défaut échouer les compilations
`pdflatex` :
```{noedit}
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{babel}
\usepackage{listings}
\lstset{
basicstyle = \ttfamily,
language = python,
frame = single,
keywordstyle = \color{green!60!black},
keywordstyle = {[2]\color{orange}},
commentstyle = \color{gray}\itshape,
stringstyle = \color{blue},
showstringspaces = false,
numbers = left,
numberstyle = \tiny,
stepnumber = 1,
numbersep = 15pt
}
\begin{document}
\begin{lstlisting}
# Une première boucle
for i in range(0,5):
print(i)
# Une autre boucle
while i != "4":
print("Encore un tour !")
\end{lstlisting}
\end{document}
```
Il y a deux moyens de résoudre ce problème : avec le package
et avec l'option `literate`.
### Package
Il suffit de :
1. charger, non pas , mais ;
2. recourir à l'option `inputencoding=utf8/latin1` ;
3. se contenter de `\lstinputlisting` (l'environnement `lstlisting` ne
peut être utilisé).
```
% Code particulier pour rendre l'exemple observable dans la FAQ
\begin{filecontents}[force,noheader]{mon_autre_fichier_python.py}
# Une première boucle
for i in range(0,5):
print(i)
# Une autre boucle
while i != "4":
print("Encore un tour !")
\end{filecontents}
% Fin du code particulier
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{babel}
\usepackage{listingsutf8}
\lstset{
basicstyle = \ttfamily,
language = python,
inputencoding = utf8/latin1,
frame = single,
keywordstyle = \color{green!60!black},
keywordstyle = {[2]\color{orange}},
commentstyle = \color{gray}\itshape,
stringstyle = \color{blue},
showstringspaces = false,
numbers = left,
numberstyle = \tiny,
stepnumber = 1,
numbersep = 15pt
}
\begin{document}
\lstinputlisting{mon_autre_fichier_python.py}
\end{document}
```
### Option `literate`
L'option `literate` permet de remplacer les caractères accentués eux-mêmes par
leurs commandes LaTeX correspondantes qui, elles, sont reconnues par
.
```
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{babel}
\usepackage{listings}
\lstset{
basicstyle = \ttfamily,
language = python,
frame = single,
keywordstyle = \color{green!60!black},
keywordstyle = {[2]\color{orange}},
commentstyle = \color{gray}\itshape,
stringstyle = \color{blue},
showstringspaces = false,
numbers = left,
numberstyle = \tiny,
stepnumber = 1,
numbersep = 15pt
% pour les accents
literate=
{é}{{\'e}}1
{è}{{\`{e}}}1
{ê}{{\^{e}}}1
{ë}{{\¨{e}}}1
{É}{{\'{E}}}1
{Ê}{{\^{E}}}1
{û}{{\^{u}}}1
{ù}{{\`{u}}}1
{â}{{\^{a}}}1
{à}{{\`{a}}}1
{Â}{{\^{A}}}1
{ç}{{\c{c}}}1
{Ç}{{\c{C}}}1
{ô}{{\^{o}}}1
{Ô}{{\^{O}}}1
{î}{{\^{i}}}1
{Î}{{\^{I}}}1,
}
\begin{document}
\begin{lstlisting}
# Une première boucle
for i in range(0,5):
print(i)
# Une autre boucle
while i != "4":
print("Encore un tour !")
\end{lstlisting}
\end{document}
```
## Code en mode *inline*
Pour insérer de courts extraits de code dans du texte, fournit
la commande `\lstinline` dont la syntaxe générale est la suivante :
```{noedit}
\lstinline⟨caractère au choix⟩⟨code⟩⟨(même) caractère au choix⟩
```
```
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{babel}
\usepackage{listings}
\lstset{
basicstyle = \ttfamily,
language = python,
frame = single,
keywordstyle = \color{green!60!black},
keywordstyle = {[2]\color{orange}},
commentstyle = \color{gray}\itshape,
stringstyle = \color{blue},
showstringspaces = false,
numbers = left,
numberstyle = \tiny,
stepnumber = 1,
numbersep = 15pt
}
\begin{document}
En Python, on utilise \lstinline|for| pour les boucles bornées et
\lstinline|while| pour les boucles non bornées.
\end{document}
```
:::{note}
- On note l’absence d’accolades pour délimiter le code après `\lstinline`, mais
la présence d’un « *caractère au choix* », qui doit être le même au début et
à la fin.
- Dans cet exemple, on a choisi « | » comme caractère.
::::
:::{admonition} Info
:class: tip
Pour une mise en forme plus élaborée, on pourra utiliser le package
:
cf. [](/4_domaines_specialises/informatique/inserer_du_code_source_informatique_tcolorbox.md)
:::