Ceci est une ancienne révision du document !
Code listings in LaTeX
Les logiciels qui affichent du code informatique utilisent des couleurs pour rendre les programmes plus lisibles. Ceci permet de repérer visuellement les mots-clefs du langage, les noms de variables, etc. Il est possible de faire la même chose avec LaTeX, pour que la structure du code soit soulignée par la mise en forme. C'est très utile pour les livres sur la programmation, mais aussi pour les travaux des étudiants en informatique.
L'extension listings est souvent considérée comme la meilleure solution pour une sortie formatée (elle se charge d'analyser les sources des programmes et d'utiliser différentes polices de caractères pour en mettre la structure en évidence), mais il existe plusieurs autres extensions bien établies qui s'appuient sur une sorte de pré-compilateur. Vous pouvez utiliser listings pour mettre en page des extraits que vous incluez dans votre source:
\usepackage{listings} \lstset{language=C} ... \begin{document} \begin{lstlisting} #include <stdio.h> int main(int argc, char ** argv) { printf("Bonjour tout le monde!\n"); return 0; } \end{lstlisting} \end{document}
mais vous pouvez aussi l'utiliser pour mettre en forme des fichiers entiers:
\usepackage{listings} \lstset{language=C} ... \begin{document} \lstinputlisting{main.c} \end{document}
These very simple examples may be decorated in a huge variety of ways,
and of course there are other languages in the package's vocabulary than just C
…
For a long time, advice on (La)TeX lists seemed to regard listings as the be-all and end-all on this topic. In the last few years, viable alternatives have appeared
Highlight is attractive if you need more than one output format for your program: as well as (La)TeX output, highlight will produce (X)HTML, RTF and XSL-FO representations of your program listing. The manual leads you through the details of defining a parameter file for a “new” language, as well as the presentation details of a language.
The minted package is another alternative that offers
the means of creating new language definitions. It requires that code
be processed using an external (python
) script, ''Pygments''.
Pygments
, in turn, needs a “lexer” that knows the language you
want to process; lots of these are available, for the more commonly-used
languages, and there is advice on “rolling your own” on the
“Pygments” website.
Usage of minted can be as simple as
which processes the program code dynamically, at typesetting time — though such usage is likely to require that separate processing be enabled.
On a rather different path, the package showexpl supports typesetting (La)TeX code and its typeset output, in parallel “panes”. (This could provide support for (La)TeX instruction texts, or for papers in TeX user group publications. The package uses listings for its (La)TeX pane, and typesets the result into a simple box, for the other pane.
Longer-established, and variously less “powerful” systems include:
- The tinyc2l system is slightly more recent: users are again encouraged to generate their own driver files for languages it doesn't already deal with, but its “tiny” name correctly hints that it's not a particularly elaborate system.
- An extremely simple system is c2latex, for which you write LaTeX source in your
C
program comments. The program then converts your program into a LaTeX document for processing. The program (implicitly) claims to be “self-documenting”.
Source: Code listings in LaTeX