US

Inclusion de listings avec l'extension listings

L'extension listings fournit sans nul doute une des plus riches manières d'insérer des listings dans vos documents. En effet, vous pourrez insérer des listings, gérer la numérotation, insérer une légende pour y faire référence, personnaliser l'aspect en ajoutant des cadres, des couleurs, colorer la syntaxe de vos programmes, ...

Nous allons, dans cette section parcourir toutes les fonctionnalités offertes dans cette extension. Pour en savoir plus, référez-vous à la documentation de l'extension.

Mode d'insertion

Il existe trois modes d'insertion de listing offerts par l'extension listings. On peut insérer un listing dans le texte (inline), séparé du texte ou depuis un fichier.

Dans le texte

Pour l'insertion dans le texte, on utilise la commande lstinline qui se comporte comme la commande verb, c'est-à-dire que pour délimiter son contenu, on utilise deux fois le même symbole. On peut également utiliser la syntaxe habituelle et préciser le code en paramètre de la commande.

1 
2 
3 
4 
5 
6 
7 
8 
9 
 
10 
\documentclass{article}
 
\usepackage[latin1]{inputenc}
\usepackage{listings}
 
\begin{document}
    \lstset{language=java}
 
    On donc la variable d'instance \lstinline{private int age;} dans le corps de la classe.
\end{document}
listing l12.13 Insertion d'un listing dans le texte

On voit donc qu'il faut charger l'extension listings puis qu'on utilise lstinline pour insérer un listing dans le texte. Vous aurez aussi remarqué que l'on précise que le code est du Java en utilisant \lstset{language=java}, on en reparlera un peu plus loin.

Insertion d'un listing dans le texte
fig l12.8 Insertion d'un listing dans le texte

Séparé du texte

Pour insérer un listing en dehors du texte, il faut utiliser l'environnement lstlisting. On peut utiliser l'option de l'environnement pour spécifier le langage, mais on y reviendra plus tard en détails.

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
Et voici l'algorithme a utiliser :
 
\begin{lstlisting}[language=pascal]
z := 0
for x := 1 to MAX do
    begin
        write 'Hello World !'
        z := z + 1
    end
write z
\end{lstlisting}
listing l12.14 Insertion d'un listing séparé du texte
Insertion d'un listing séparé du texte
fig l12.9 Insertion d'un listing séparé du texte

Depuis un fichier externe

Rien de plus simple, une commande à qui on précise le nom du fichier et le tout est joué. Très pratique pour intégrer les sources de programme pour un rapport par exemple ...

1 
\lstinputlisting[language=java]{HelloWorld.java}
listing l12.15 Insertion d'un listing depuis un fichier externe

Les options

Comme vous avez pu le voir, il existe deux manières de préciser des options pour la mise en forme des listings : soit on utilise la commande lstset qui change la valeur de l'option pour tout le document, soit on précise localement des options en utilisant l'option des commandes et environnements utilisé.

Toutes les options sont précisées par un couple clé=valeur comme déjà rencontré pour la commande includegraphics vue au chapitre 3.

Style du texte

On peut modifier l'apparence que va prendre le texte, en modifiant la police, la couleur, le style, ... Les options à utiliser sont reprises dans le tableau suivant.

Option Description
basicstyle Style de base du texte
keywordstyle Style des mots-clés (ou mots réservés)
identifierstyle Style des identificateurs
commentstyle Style des commentaires
stringstyle Style des chaines de caractères
tab l12.1 Options pour le style de texte

En outre, vous avez peut-être remarqué sur la figure l12.9 que les espaces dans les chaines de caractères sont imprimés de manière visible. Si vous ne voulez pas voir les espaces, vous pouvez utiliser l'option showstringspaces et lui donner pour valeur false.

1 
2 
3 
4 
5 
6 
\lstset{basicstyle=\small,
keywordstyle=\bf \color{blue},
identifierstyle=\underline,
commentstyle=\color[gray]{0.5},
stringstyle=\color{red},
showstringspaces=false}
listing l12.15 Modifier le style
Modifier le style
fig l12.10 Modifier le style

Dans cet exemple, on a donc le style de base qui définit une petite police, ensuite, on met les mots-clés en gras et en bleu, on souligne les identificateurs, les commentaires sont en gris moyen et italique, les chaines de caractères sont en rouge et on ne montre pas les espaces. Vous aurez remarqué que l'on a mis toutes les options séparées par des virgules dans un seule commande lstset. On aurait aussi pu écrire autant de commandes lstset qu'il y a d'options à définir.

La numérotation

On peut ajouter des numéros aux lignes d'un listing en utilisant des options particulières. On pourra jouer sur le numéro de la première ligne, sur le pas de la numérotation, sur le style des numéros. Le tableau suivant reprend les options relatives à la numérotation.

Option Description
numbers Position des numéros
left, right ou none (par défaut)
numberstyle Style des numéros
numbersep Distance entre les numéros et le listing
firstnumber Numéro de la première ligne
Un numéro, last ou auto
numberfirstline Faut-il numéroter d'office la première ligne ou non
true ou false
tab l12.2 Options pour la numérotation
1 
2 
3 
4 
5 
6 
\lstset{numbers=left,
numberstyle=\tiny \bf \color{blue},
stepnumber=2,
numbersep=10pt,
firstnumber=11,
numberfirstline=true}
listing l12.16 Ajouter les numéros de ligne
Ajouter les numéros de ligne
fig l12.11 Ajouter les numéros de ligne

Dans notre exemple, on place les numéros de ligne à gauche du listing, les numéros sont minuscules, en gras et en bleu, on numérote les lignes multiples de 2, en commençant au numéro 11 et en forçant l'affichage du numéro de la première ligne. Enfin, les numéros sont à 10 points du listing.

Vous aurez remarqué que le mode de fonctionnement du numéro de la première ligne et du pas est exactement le même que pour l'environnement listing de l'extension moreverb vu à la section précédente, mais ici, on peut forcer l'affichage du numéro de la première ligne avec numberfirstline.

Continuation de listing

Rappelez-vous la section précédente, on avait un environnement listingcont qui permettait d'insérer un listing tout en gardant la numérotation d'un autre, en le continuant. On peut faire la même chose ici en utilisant l'option firstnumber.

Si vous donnez comme valeur à cette option last, la numérotation continuera celle du listing précédent. On peut également obtenir le même effet en donnant la valeur auto et en ajoutant un nom au listing avec l'option name. Dans ce cas, la numérotation continuera celle du listing précédent avec le même nom.

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
Et voici l'algorithme a utiliser :
 
\begin{lstlisting}[firstnumber=10,name=algo1]
z := 0
for x := 1 to MAX do
    begin
        {Affiche Hello World}
        write 'Hello World !'
        z := z + 1
    end
\end{lstlisting}
 
\vspace{2cm} Et maintenant la suite de l'algorithme :
 
\begin{lstlisting}[firstnumber=auto,name=algo1] % Et la suite
write z
\end{lstlisting}
listing l12.17 Listings en plusieurs parties
Listings en plusieurs parties
fig l12.12 Listings en plusieurs parties

Reconnaissance syntaxique

On l'a déjà vu plus haut, pour activer la reconnaissance syntaxique, on utilise l'option language. On peut, en plus de spécifier le langage de programmation, spécifier un dialecte particulier que l'on précisera avant tout entre crochets. Par exemple, pour un code en C#, on écrit :

1 
\lstset{language={[Sharp]C}}
listing l12.18 Reconnaissance syntaxique du C#

Lorsque l'on précise un dialecte, il convient d'entourer le nom du langage et du dialecte dans un bloc afin d'éviter des erreurs de compilation avec l'extension keyval.

Pour la liste des tout les langages supportés par défaut, nous vous renvoyons à la documentation de l'extension listings. Voici en vrac quelques langages supportés :

Ada, Algol, Assembler, bash, Basic, C, C++, Cobol, Delphi, Eiffel, Erlang, Fortran, Gnuplot, Haskell, HTML, Java, Lisp, make, Mathematica, Matlab, ML, Octave, Oz, Pascal, Perl, PHP, Prolog, Python, R, Ruby, Scilab, SQL, Tex, VBScript, Verilog, VHDL, XML, ...

Positionnement

Toute une série d'options ont traits au positionnement du listing par rapport au texte environnant. La première option est float. Si vous précisez cette option sans valeur, le listing va être mis dans un flottant. Vous pouvez également préciser la position préférée pour le flottant avec les lettres tbph (top, bottom, page, here) déjà rencontrée au chapitre 3.

L'exemple suivant montre comment paramétrer un listing qui doit préférentiellement être placé à l'endroit précisé par le code source, sinon en haut de la page suivante.

1 
\lstset{float=ht}
listing l12.19 Environnement flottant

On peut ensuite modifier l'espace vertical entre le listing et le texte, au-dessus du listing avec aboveskip et en dessous avec belowskip. L'exemple suivant montre comment mettre 1cm entre le dessus du listing et le texte et 2cm entre le bas du listing et le texte.

1 
\lstset{aboveskip=1cm,belowskip=2cm}
listing l12.20 Espacement vertical

Style du listing

Enfin, pour terminer cette première introduction à l'extension listings, découvrons comment personnaliser l'apparence du listing, en ajoutant un cadre autour, en changeant la couleur de fond, ...

Cadre

Pour ajouter un cadre rectangulaire autour du listing, on utilise l'option frame. La figure suivante illustre différents type de cadre obtenu avec différentes valeurs de l'option frame.

Ajouter un cadre
fig l12.13 Ajouter un cadre

Vous pouvez voir que sur les deux dernies exemples, on utilise les lettres tblr pour spécifier si on veut une bordure en haut, en bas, à gauche ou à droite. Avec les lettres majuscules, on signale que l'on souhaite une double bordure.

Couleurs

On peut spécifier la couleur de fond du listing avec l'option backgroundcolor et la couleur du cadre si on en a un avec rulecolor. De plus, on a fillcolor qui est la couleur entre le texte et le premier cadre et rulesepcolor qui est la couleur entre les deux cadres si on a une double bordure. Le tout en exemple :

1 
2 
3 
4 
5 
\lstset{frame=TBlr,
backgroundcolor=\color{green},
rulecolor=\color{blue},
fillcolor=\color{yellow},
rulesepcolor=\color{red}}
listing l12.21 Couleurs
Couleurs
fig l12.14 Couleurs

Légende, référence et liste des listings

Légende

On peut ajouter une légende à un listing, et ensuite imprimer la liste des listings, tout comme on avait déjà la liste des figures ou la liste des tables. On utilise l'option caption pour spécifier la légende du listing et la commande lstlistoflistings pour insérer la liste des listings.

1 
 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
\begin{lstlisting}[firstnumber=10,numbers=left,numberstyle=\bf \tiny \color{black},caption={Programme d'exemple de la syntaxe de Pascal},language=pascal,frame=lines]
z := 0
for x := 1 to MAX do
    begin
        {Affiche Hello World}
        write 'Hello World !'
        z := z + 1
    end
\end{lstlisting}
 
\lstlistoflistings
listing l12.22 Ajouter une légende et insérer la liste des listings
Ajouter une légende et insérer la liste des listings
fig l12.15 Ajouter une légende et insérer la liste des listings

Référence croisée

Rien de plus simple que de faire référence à un listing, on utilise le même principe que pour les figures et les tables : on ajoute une étiquette au listing en utilisant l'option label. Ensuite, on fait référence à un listing en utilisant la commande ref ou une variante comme vue au chapitre 6.

  • Espace membre
  • Learning Center
  • Les forums
  • Livre d'or
  • Imprimer
  • Boutique
  • Info
  • Règlement
  • Erreur
  • Newsletter