Souvent, quand on fait des docs LaTeX, le réflexe pour citer du code est souvent d'utiliser verbatim. Or moi, je suis pas vraiment un adepte de verbatim, c'est pas très configurable, pas très joli, ça gère extrêmement mal les sauts de lignes, bref, j'étais vraiment pas fan. Ce que je vous propose après cette longue interruption dans l'écriture de ce blog, c'est d'utiliser le package listings, qui est très configurable et qui rend relativement bien.

Les langages supportés

Le package supporte une bonne cinquantaine de langages différents, en voilà une rapide sélection :

  • C (ANSI, Handel, Objective, Sharp), C++ (ANSI, GNU, ISO, Visual), Caml
  • Java (empty, AspectJ)
  • Matlab, Scilab, R
  • Python, Perl, PHP
  • TeX (AlLaTeX, common, LaTeX, plain, primitive)
  • XML

La forme

Les options sont vraiment nombreuses. Par exemple, vous pouvez numéroter les lignes (ici toutes les 5 lignes) :

\lstset{numbers=left, numberstyle=\tiny, stepnumber=5, numbersep=5pt}

Vous pouvez également rendre visibles les espaces et les tabulations :

\lstset{showspaces=true,showtabs=true,tab=\rightarrowfill}

Vous pouvez entourer le code d'un rectangle :

\begin{lstlisting}[frame=single] ... \end{lstlisting}

Vous pouvez même ajouter un arrière-plan :

\lstset{backgroundcolor=\color{red}}

Il y a 60 pages de documentation, alors je vais dans la section qui suit vous donner un exemple d'utilisation que j'utilise et qui rend plutôt pas mal.

Exemple d'utilisation

\usepackage{listings}

\lstset{language=[Visual]C++,basicstyle=\small,frame=leftline,captionpos=b,linewidth=175mm,breaklines=true, commentstyle=\color{green},stringstyle=\color{red},identifierstyle=\ttfamily,keywordstyle=\color{blue}}

\begin{lstlisting}[caption={Construction simplifiée du graphe DirectShow}]
CoCreateInstance(CLSID_FilterGraph,NULL, CLSCTX_INPROC_SERVER,IID_IGraphBuilder, (void**) &pGraph);
hr = pGraph->AddSourceFilter (wFileAddress, L"Source", &pSrcFilter);
\end{lstlisting}

N'hésitez pas à apporter votre contribution en proposant des modèles sympathiques !