> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/fr/mise-en-forme/11-code-listing.md).

# Listing de code

## Introduction

LaTeX est largement utilisé dans les sciences et la programmation est devenue un aspect important dans plusieurs domaines scientifiques, d'où le besoin d'un outil qui affiche correctement le code. Cet article explique comment utiliser l'environnement standard **verbatim** ainsi que le package **listings**, qui offrent des fonctionnalités de mise en forme du code plus avancées. [Cet article séparé](/latex/fr/mise-en-forme/12-code-highlighting-with-minted.md) traite du `minted` package, qui effectue la coloration syntaxique à l'aide de la bibliothèque Python `pygmentize` .

## L'environnement verbatim

L'outil par défaut pour afficher du code en LaTeX est `verbatim`, qui génère une sortie en police à chasse fixe.

```latex
\begin{verbatim}
Le texte placé à l'intérieur de l'environnement \texttt{verbatim}
est imprimé tel quel
et toutes les commandes \LaTeX{} sont ignorées.
\end{verbatim}
```

[Ouvrez cet exemple sur Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=verbatim+text+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bverbatim%7D%0AText+enclosed+inside+%5Ctexttt%7Bverbatim%7D+environment+%0Ais+printed+directly+%0Aand+all+%5CLaTeX%7B%7D+commands+are+ignored.%0A%5Cend%7Bverbatim%7D%0A%5Cend%7Bdocument%7D)

Le code ci-dessus produit la sortie suivante :

![Verbatim1.png](/files/69b34adc2cf980f06ef620adab013025ff92823f)

Comme dans l'exemple de l'introduction, tout le texte est affiché en conservant les sauts de ligne et les espaces blancs. Il existe une version étoilée de cette commande dont la sortie est légèrement différente.

```latex
\begin{verbatim*}
Le texte placé à l'intérieur de l'environnement \texttt{verbatim}
est imprimé tel quel
et toutes les commandes \LaTeX{} sont ignorées.
\end{verbatim*}
```

[Ouvrez cet exemple sur Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=verbatim+text+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bverbatim%2A%7D%0AText+enclosed+inside+%5Ctexttt%7Bverbatim%7D+environment+%0Ais+printed+directly+%0Aand+all+%5CLaTeX%7B%7D+commands+are+ignored.%0A%5Cend%7Bverbatim%2A%7D%0A%5Cend%7Bdocument%7D)

Le code ci-dessus produit la sortie suivante :

![Verbatim2.png](/files/d1d77de0a1b02f4349a43387662036c95d04b1d5)

Dans ce cas, les espaces sont mis en évidence par un caractère spécial « espace visible » : **`␣`**.

Un texte de type verbatim peut également être utilisé dans un paragraphe au moyen de `\verb` commande.

```latex
Dans le répertoire \verb|C:\Windows\system32|, vous pouvez trouver de nombreuses applications Windows
système.

La commande \verb+\ldots+ produit \ldots
```

[Ouvrez cet exemple sur Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=using+the+%5Cverb+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0AIn+the+directory+%5Cverb%7CC%3A%5CWindows%5Csystem32%7C+you+can+find+a+lot+of+Windows+%0Asystem+applications.+%0A+%0AThe+%5Cverb%2B%5Cldots%2B+command+produces+%5Cldots%0A%5Cend%7Bdocument%7D)

Le code ci-dessus produit la sortie suivante :

![Verbatim3OLV2.png](/files/c7e2fefe8e28ae709573fa13a941f0353cc7b4ee)

La commande `\verb|C:\Windows\system32|` imprime le texte à l'intérieur des délimiteurs `|` au format verbatim. Tout caractère, sauf les lettres et `*`, peut être utilisé comme délimiteur. Par exemple `\verb+\ldots+` utilise `+` comme délimiteur.

## Utiliser listings pour mettre en évidence du code

Pour utiliser l' `lstlisting` environnement, vous devez ajouter la ligne suivante au préambule de votre document :

```latex
\usepackage{listings}
```

Voici un exemple d'utilisation de l' `lstlisting` environnement du `listings` package :

```latex
\begin{lstlisting}
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #pour devenir la matrice d'incidence
    VT = np.zeros((n*m,1), int)  #variable factice

    #calculer la matrice xor bit à bit
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1)

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{lstlisting}
```

[Ouvrez cet `listings` exemple sur Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=listings+package+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Blistings%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Blstlisting%7D%0Aimport+numpy+as+np%0A++++%0Adef+incmatrix%28genl1%2Cgenl2%29%3A%0A++++m+%3D+len%28genl1%29%0A++++n+%3D+len%28genl2%29%0A++++M+%3D+None+%23to+become+the+incidence+matrix%0A++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29++%23dummy+variable%0A++++%0A++++%23compute+the+bitwise+xor+matrix%0A++++M1+%3D+bitxormatrix%28genl1%29%0A++++M2+%3D+np.triu%28bitxormatrix%28genl2%29%2C1%29+%0A%0A++++for+i+in+range%28m-1%29%3A%0A++++++++for+j+in+range%28i%2B1%2C+m%29%3A%0A++++++++++++%5Br%2Cc%5D+%3D+np.where%28M2+%3D%3D+M1%5Bi%2Cj%5D%29%0A++++++++++++for+k+in+range%28len%28r%29%29%3A%0A++++++++++++++++VT%5B%28i%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28i%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++%0A++++++++++++++++if+M+is+None%3A%0A++++++++++++++++++++M+%3D+np.copy%28VT%29%0A++++++++++++++++else%3A%0A++++++++++++++++++++M+%3D+np.concatenate%28%28M%2C+VT%29%2C+1%29%0A++++++++++++++++%0A++++++++++++++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29%0A++++%0A++++return+M%0A%5Cend%7Blstlisting%7D%0A%5Cend%7Bdocument%7D)

Le code ci-dessus produit la sortie suivante :

![CodeListingEx1.png](/files/c60808b8827174ef9b6a60f6b9b1e0e4582140a5)

Dans cet exemple, la sortie ignore toutes les commandes LaTeX et le texte est affiché en conservant tous les sauts de ligne et les espaces blancs saisis. Voyons un deuxième exemple :

```latex
\begin{lstlisting}[language=Python]
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #pour devenir la matrice d'incidence
    VT = np.zeros((n*m,1), int)  #variable factice

    #calculer la matrice xor bit à bit
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1)

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{lstlisting}
```

[Ouvrez cet `listings` exemple sur Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Python+listings+package+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Blistings%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Blstlisting%7D%5Blanguage%3DPython%5D%0Aimport+numpy+as+np%0A++++%0Adef+incmatrix%28genl1%2Cgenl2%29%3A%0A++++m+%3D+len%28genl1%29%0A++++n+%3D+len%28genl2%29%0A++++M+%3D+None+%23to+become+the+incidence+matrix%0A++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29++%23dummy+variable%0A++++%0A++++%23compute+the+bitwise+xor+matrix%0A++++M1+%3D+bitxormatrix%28genl1%29%0A++++M2+%3D+np.triu%28bitxormatrix%28genl2%29%2C1%29+%0A%0A++++for+i+in+range%28m-1%29%3A%0A++++++++for+j+in+range%28i%2B1%2C+m%29%3A%0A++++++++++++%5Br%2Cc%5D+%3D+np.where%28M2+%3D%3D+M1%5Bi%2Cj%5D%29%0A++++++++++++for+k+in+range%28len%28r%29%29%3A%0A++++++++++++++++VT%5B%28i%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28i%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++%0A++++++++++++++++if+M+is+None%3A%0A++++++++++++++++++++M+%3D+np.copy%28VT%29%0A++++++++++++++++else%3A%0A++++++++++++++++++++M+%3D+np.concatenate%28%28M%2C+VT%29%2C+1%29%0A++++++++++++++++%0A++++++++++++++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29%0A++++%0A++++return+M%0A%5Cend%7Blstlisting%7D%0A%5Cend%7Bdocument%7D)

Le code ci-dessus produit la sortie suivante :

![CodeListingEx2.png](/files/ec2a79c264533792c803d571ec885b324d34f0c5)

Le paramètre supplémentaire entre crochets `[language=Python]` active la coloration du code pour ce langage de programmation particulier (Python) ; les mots spéciaux sont en gras et les commentaires en italique. Voir le [guide de référence](#reference-guide) pour la liste complète des langages de programmation pris en charge.

## Importer du code depuis un fichier

Le code est généralement stocké dans un fichier source ; une commande qui extrait automatiquement le code d'un fichier devient donc très pratique.

```latex
Le code suivant sera importé directement depuis un fichier

\lstinputlisting[language=Octave]{BitXorMatrix.m}
```

![CodeListingEx3.png](/files/0efd31efd291f1c0b59d36eefcdb9835a00f560f)

La commande `\lstinputlisting[language=Octave]{BitXorMatrix.m}` importe le code du fichier *BitXorMatrix.m*, le paramètre supplémentaire entre crochets active la coloration du langage pour le langage de programmation Octave. Si vous devez importer seulement une partie du fichier, vous pouvez spécifier deux paramètres séparés par des virgules à l'intérieur des crochets. Par exemple, pour importer le code de la ligne 2 à la ligne 12, la commande précédente devient

```latex
\lstinputlisting[language=Octave, firstline=2, lastline=12]{BitXorMatrix.m}
```

Si `firstline` ou `lastline` est omis, on suppose que les valeurs correspondent respectivement au début du fichier ou à la fin du fichier.

## Styles et couleurs du code

La mise en forme du code avec le **package listings** est hautement personnalisable. Voyons un exemple

```latex
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{mystyle}{
    backgroundcolor=\color{backcolour},
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=5pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2
}

\lstset{style=mystyle}

\begin{document}
Le code suivant sera importé directement depuis un fichier

\lstinputlisting[language=Octave]{BitXorMatrix.m}
\end{document}
```

Le code ci-dessus produit la sortie suivante :

![CodeListingEx4.png](/files/197149a4842bec03e2ea04c82daecc2112a99f37)

Comme vous pouvez le voir, la coloration et le style du code améliorent considérablement la lisibilité.

Dans cet exemple, le package **xcolor** est importé puis la commande `\definecolor{}{}{}` est utilisée pour définir de nouvelles couleurs au format rgb qui seront utilisées plus tard. Pour plus d'informations, voir : [utiliser les couleurs dans LaTeX](/latex/fr/mise-en-forme/13-using-colors-in-latex.md)

Il existe essentiellement deux commandes qui génèrent le style de cet exemple :

**\lstdefinestyle{mystyle}{...}**

Définit un nouveau style de listing de code appelé « mystyle ». Dans le deuxième couple d'accolades, les options qui définissent ce style sont passées ; voir le guide de référence pour une description complète de celles-ci et de certains autres paramètres.

**\lstset{style=mystyle}**

Active le style « mystyle ». Cette commande peut être utilisée dans votre document pour passer à un autre style si nécessaire.

## Légendes et liste des listings

Comme dans les flottants ([les tableaux](/latex/fr/figures-et-tableaux/01-tables.md) et [les figures](/latex/fr/autres-sujets/27-inserting-images.md)), des légendes peuvent être ajoutées à un listing pour une présentation plus claire.

```latex
\begin{lstlisting}[language=Python, caption=Python example]
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #pour devenir la matrice d'incidence
    VT = np.zeros((n*m,1), int)  #variable factice

    #calculer la matrice xor bit à bit
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1)

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{lstlisting}
```

[Ouvrez cet `listings` exemple sur Overleaf](/latex/fr/mise-en-forme/11-code-listing.md)

Le code ci-dessus produit la sortie suivante :

![CodeListingEx5.png](/files/e37b8aaf6e53cb73abd817dc378d529efbe9a6b5)

L'ajout du paramètre séparé par des virgules `caption=Python example` dans les crochets active la légende. Cette légende pourra ensuite être utilisée dans la liste des listings.

```latex
\lstlistoflistings
```

![CodeListingEx6OLV2.png](/files/feb4d5fc574ace2f41e69e4aed185ee8c1e3f547)

## Projet exemple sur Overleaf

Ouvrez ce lien pour [essayer `listings` l'exemple du package sur Overleaf.](https://www.overleaf.com/project/new/template/20053?id=68266290\&templateName=listings+package+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Guide de référence

### Langages pris en charge

**langages pris en charge (et leurs dialectes si possible, les dialectes sont indiqués entre crochets et les dialectes par défaut sont en italique) :**

|                                                        |                                                   |
| ------------------------------------------------------ | ------------------------------------------------- |
| ABAP (R/2 4.3, R/2 5.0, R/3 3.1, R/3 4.6C, *R/3 6.10*) | ACSL                                              |
| Ada (*2005*, 83, 95)                                   | Algol (60, *68*)                                  |
| Ant                                                    | Assembler (Motorola68k, x86masm)                  |
| Awk (*gnu*, POSIX)                                     | bash                                              |
| Basic (Visual)                                         | C (*ANSI*, Handel, Objective, Sharp)              |
| C++ (ANSI, GNU, *ISO*, Visual)                         | Caml (*light*, Objective)                         |
| CIL                                                    | Clean                                             |
| Cobol (1974, *1985*, ibm)                              | Comal 80                                          |
| command.com (*WinXP*)                                  | Comsol                                            |
| csh                                                    | Delphi                                            |
| Eiffel                                                 | Elan                                              |
| erlang                                                 | Euphoria                                          |
| Fortran (77, 90, *95*)                                 | GCL                                               |
| Gnuplot                                                | Haskell                                           |
| HTML                                                   | IDL (vide, CORBA)                                 |
| inform                                                 | Java (vide, AspectJ)                              |
| JVMIS                                                  | ksh                                               |
| Lingo                                                  | Lisp (vide, Auto)                                 |
| Logo                                                   | make (vide, gnu)                                  |
| Mathematica (1.0, 3.0, *5.2*)                          | Matlab                                            |
| Mercury                                                | MetaPost                                          |
| Miranda                                                | Mizar                                             |
| ML                                                     | Modula-2                                          |
| MuPAD                                                  | NASTRAN                                           |
| Oberon-2                                               | OCL (décoratif, *OMG*)                            |
| Octave                                                 | Oz                                                |
| Pascal (Borland6, *Standard*, XSC)                     | Perl                                              |
| PHP                                                    | PL/I                                              |
| Plasm                                                  | PostScript                                        |
| POV                                                    | Prolog                                            |
| Promela                                                | PSTricks                                          |
| Python                                                 | R                                                 |
| Reduce                                                 | Rexx                                              |
| RSL                                                    | Ruby                                              |
| S (vide, PLUS)                                         | SAS                                               |
| Scilab                                                 | sh                                                |
| SHELXL                                                 | Simula (*67*, CII, DEC, IBM)                      |
| SPARQL                                                 | SQL                                               |
| tcl (vide, tk)                                         | TeX (AlLaTeX, common, LaTeX, *simple*, primitive) |
| VBScript                                               | Verilog                                           |
| VHDL (vide, AMS)                                       | VRML (*97*)                                       |
| XML                                                    | XSLT                                              |

### Options pour personnaliser les styles de listing de code

* **backgroundcolor** - couleur de l'arrière-plan. Le package externe ***color*** ou ***xcolor*** est nécessaire.
* **commentstyle** - style des commentaires dans le langage source.
* **basicstyle** - taille/famille de police/etc. pour la source (p. ex. `basicstyle=\ttfamily\small`)
* **keywordstyle** - style des mots-clés dans le langage source (p. ex. `keywordstyle=\color{red}`)
* **numberstyle** - style utilisé pour les numéros de ligne
* **numbersep** - distance des numéros de ligne par rapport au code
* **stringstyle** - style des chaînes dans le langage source
* **showspaces** - mettre en évidence les espaces dans le code (vrai/faux)
* **showstringspaces** - mettre en évidence les espaces dans les chaînes (vrai/faux)
* **showtabs** - mettre en évidence les tabulations dans le code (vrai/faux)
* **numbers** - position des numéros de ligne (gauche/droite/aucun, c.-à-d. pas de numéros de ligne)
* **prebreak** - afficher un marqueur à la fin de la ligne coupée (p. ex. `prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}`)
* **captionpos** - position de la légende (h/b)
* **frame** - affichage d'un cadre autour du code (none/leftline/topline/bottomline/lines/single/shadowbox)
* **breakatwhitespace** - définit si les coupures automatiques ne doivent se produire qu'aux espaces
* **breaklines** - coupure automatique des lignes
* **keepspaces** - conserver les espaces dans le code, utile pour l'indentation
* **tabsize** - taille de tabulation par défaut
* **escapeinside** - spécifier les caractères permettant de passer du code source à LaTeX (p. ex. `escapeinside={\%*}{*)}`)
* **rulecolor** - spécifier la couleur du cadre

## Lectures complémentaires

Pour plus d'informations, voir :

* [Coloration syntaxique du code avec minted](/latex/fr/mise-en-forme/12-code-highlighting-with-minted.md)
* [Utiliser les couleurs dans LaTeX](/latex/fr/mise-en-forme/13-using-colors-in-latex.md)
* [Table des matières](/latex/fr/structure-du-document/02-table-of-contents.md)
* [Gestion dans un grand projet](/latex/fr/structure-du-document/07-management-in-a-large-project.md)
* [Projets LaTeX multi-fichiers](/latex/fr/structure-du-document/08-multi-file-latex-projects.md)
* [Tailles, familles et styles de police](/latex/fr/polices/01-font-sizes-families-and-styles.md)
* [Familles de polices](/latex/fr/polices/02-font-typefaces.md)
* [**listings** documentation du paquet](https://texdoc.org/serve/listings/0)
* [**listings** site web CTAN](http://www.ctan.org/pkg/listings)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/fr/mise-en-forme/11-code-listing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
