Utilisation simple de l extension listings Jacques Madelaine jacques@info.unicaen.fr 16 novembre 2004 1 Introduction L extension listings permet des rendus agréables de codes sources. Il faut dans le préambule ajouter : \ usepackage { l i s t i n g s Il suffira pour faire un listing d utiliser l environnement lstlisting en précisant en option le langage avec language=xxx. On peut mettre comme langage : Java, HTML, XML 1 ksh 2, C++ et TeX, entre autres. On pourra ajouter dans les options entre crochets : frame=single pour avoir un cadre, frame=trbl pour un joli cadre, style=nombres pour numéroter les lignes, si on a défini dans le préambule le style nombres avec : numberstyle=\tiny, numbersep=10pt... On peut toujours consulter la doc file:/usr/share/doc/texmf/latex/ listings/listings.dvi.gz que l on peut visualiser en tapant simplement dans un shell : texdoc listings 2 Exemple simple pour du HTML Le rendu suivant est obtenu en encadrant le code html avec : \begin{lstlisting[language=html] et \end{lstlisting <t i t l e >Exemple 1</t i t l e > <?php p r i n t Bonjour, oh monde! ;? > 1 Le style pour XML est bien décevant dans la mise en œuvre actuelle. 2 Pour le korn-shell, fonctionne très bien pour bash. 1
3 Exemple avec du shell Le rendu suivant est obtenu en encadrant le code shell avec : \begin{lstlisting[language=ksh] et \end{lstlisting #! / bin / sh # ce programme simule un défragmenteur windows sous Unix ; ) echo Début de défragmentation yes head 1 0 while read ; do yes head 6 0 while read ; do echo ne / ; s l e e p 1 ; echo ne \b ; s l e e p 1 ; echo ne \b\\ ; s l e e p 1 ; echo ne \b ; s l e e p 1 ; echo ne \b+ ; done echo done echo F é l i c i t a t i o n s, vous pouvez c o n t i n u e r à t r a v a i l l e r 4 Avec des cadres On a précisé ici les options : [language=php,frame=trbl] : <?php print Bonjour, oh monde! ;? > 5 Attention aux lignes trop longues Les lignes ne sont pas repliées. On peut néanmoins choisir une taille de police plus petite... <?php print Bonjour, oh m e r v e i l l e u x monde p l e i n de l i g n e s beaucoup trop lon 2
6 Avec des numéros aux lignes On ajoute l option [ numbers=left,stepnumber=2,numberstyle=\tiny,numbersep=10pt] pour numéroter les lignes en petit de 2 en 2 : 2 4 6 <?php print Bonjour, oh monde! ;? > 8 On peut mettre simplement l option [ style =nombres] si on a défini au préalable le style : numberstyle=\tiny, numbersep=10pt 7 PHP L extension listings ne connaît pas de base le language PHP. Pour lui apprendre on ajoute simplement : \ l s t d e f i n e l a n g u a g e {PHP{ morekeywords={and, array, break, case, continue, d e f a u l t, do, echo, e l s e, e l s e i f, e x i t, extends, for, global, i f, include, i n c l u d e once, or, print, r e q u i r e, r e q u i r e once, return, s t a t i c, switch, then, var, while, xor, foreach, as, c l a s s, function, new, extends, s e n s i t i v e,% morecomment=[ l ]\#,% morecomment=[ l ] / /,% morecomment=[ s ]{/ { /,% morestring =[b ],% morestring =[b ] % [ keywords, comments, s t r i n g s ] L exemple suivant est obtenu avec les options [ language=php] <t i t l e >F a c t o r i e l </ t i t l e > <body b g c o l o r= #FAF0E6 > <h1 a l i g n= c e n t e r >F a c t o r i e l </h1> <?php // D e f i n i t i o n o f the f a c t o r i e l f u n c t i o n function f a c t ( $n ) { i f ( $n == 0) 3
return 1 ; return $n f a c t ( $n 1); // Parameter c o n t r o l i f ( $ GET [ N ] == $ GET [ N ] > 10000) $n = 5 ; else $n = $ GET [ N ] ; // The r e s u l t print f a c t o r i e l $n =. f a c t ( $n ) ; 8 Du L A TEX dans les commentaires Il faut ajouter texcl dans les options. Du coup on peut mettre du L A TEX dans les commentaires qui sera interprété comme tel! \begin{lstlisting[language=php,texcl] <?php // un super commentaire gr^ace à \LaTeX // on calcule ici $6 \times \sqrt{\sum_{k=1^n \frac{1{k^2$ // et on va vers $\Pi$ car $\lim_{n \to \infty \sum_{k=1^n \frac{1{k^2 = \frac{\pi^2 function verspi($n) { $sum = 0; for($k = 1; $k < $n; $k++) $sum += 1/($k*$k) return sqrt(6*$sum); print verspi($_get["n"]); \end{lstlisting <?php // un super commentaire grâce à L A TEX // on calcule ici 6 n k=1 1 k 2 n // et on va vers Π car lim n k=1 1 k = π2 2 6 function v e rspi ( $n ) { $sum = 0 ; for ( $k = 1 ; $k < $n ; $sum += 1/( $k $k ) return sqrt (6 $sum ) ; print v e rspi ($ GET [ n ] ) ; $k++) 4
9 Résumé Voici ce qui a été utilisé en préambule de ce document en ce qui concerne l extension listings : \ usepackage { l i s t i n g s \ l s t s e t { extendedchars=true \ l s t d e f i n e l a n g u a g e {PHP{ morekeywords={and, array, break, case, continue, d e f a u l t, do, echo, e l s e, e l s e i f, e x i t, extends, for, global, i f, include, i n c l u d e once, or, print, r e q u i r e, r e q u i r e once, return, s t a t i c, switch, then, var, while, xor, foreach, as, c l a s s, function, new, extends, s e n s i t i v e,% morecomment=[ l ]\#,% morecomment=[ l ] / /,% morecomment=[ s ]{/ { /,% morestring =[b ],% morestring =[b ] % [ keywords, comments, s t r i n g s ] numberstyle=\tiny, numbersep=10pt 5