Utilisation simple de l`extension listings
Transcription
Utilisation simple de l`extension listings
Utilisation simple de l’extension listings Jacques Madelaine [email protected] 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 : \ l s t d e f i n e s t y l e { nombres }{ numbers=l e f t , stepnumber =10 , n u m b e r s t y l e=\t i n y , 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} <html> <head> <t i t l e >Exemple 1</ t i t l e > </head> <body> <?php p r i n t ” Bonjour , oh monde ! ” ; ? > </body> </html> 1 Le style pour XML est bien décevant dans la mise en œuvre actuelle. le korn-shell, fonctionne très bien pour bash. 2 Pour 1 3 Exemple avec du shell Le rendu suivant est obtenu en encadrant le code shell avec : \begin{lstlisting}[language=ksh] et \end{lstlisting} #! / b i n / sh # ce programme s i m u l e un dé f r a g m e n t e u r windows s o u s Unix ; −) echo ”Début de dé f r a g m e n t a t i o n ” y e s | head − 1 0 | while read ; do y e s | 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] : <html> <head> < t i t l e >Exemple 1</ t i t l e > </head> <body> <?php print ” Bonjour , oh monde ! ” ; ? > </body> </html> 5 Attention aux lignes trop longues Les lignes ne sont pas repliées. On peut néanmoins choisir une taille de police plus petite... <html> <head> < t i t l e >Exemple 1</ t i t l e > </head> <body> <?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 t r o p l o n </body> </html> 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 8 <html> <head> < t i t l e >Exemple 1</ t i t l e > </head> <body> <?php print ” Bonjour , oh monde ! ” ; ? > </body> </html> On peut mettre simplement l’option [ style =nombres] si on a défini au préalable le style : \ l s t d e f i n e s t y l e { nombres }{ numbers=l e f t , stepnumber =10 , n u m b e r s t y l e=\t i n y , 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 , c a s e , c o n t i n u e , d e f a u l t , do , echo , e l s e , e l s e i f , e x i t , extends , f o r , g l o b a l , i f , i n c l u d e , i n c l u d e once , or , p r i n t , r e q u i r e , r e q u i r e once , r e t u r n , s t a t i c , s w i t c h , then , var , w h i l e , xor , f o r e a c h , as , c l a s s , f u n c t i o n , new , e x t e n d s } , s e n s i t i v e ,% morecomment=[ l ]\# ,% morecomment=[ l ] / / ,% morecomment=[ s ] { / ∗ } { ∗ / } ,% m o r e s t r i n g =[b ] ” ,% m o r e s t r i n g =[b ] ’% } [ keywords , comments , s t r i n g s ] L’exemple suivant est obtenu avec les options [language=PHP] <html> <head> < t i t l e >F a c t o r i e l </ t i t l e > </head> <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 t h e 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 ’ ] > 1 0 0 0 0 ) $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 ) ; ?> </body> </html> 8 Du LATEX dans les commentaires Il faut ajouter texcl dans les options. Du coup on peut mettre du LATEX 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 à LATEX qP n 1 // on calcule ici 6 × k=1 k2 Pn 2 // et on va vers Π car limn→∞ k=1 k12 = π6 function v e r s P i ( $n ) { $sum = 0 ; for ( $k = 1 ; $k < $n ; $k++) $sum += 1/( $k ∗ $k ) return sqrt ( 6 ∗ $sum ) ; } print v e r s P i ($ GET [ ”n” ] ) ; ?> 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 { e x t e n d e d c h a r s=t r u e } \ l s t d e f i n e l a n g u a g e {PHP}{ morekeywords={and , array , break , c a s e , c o n t i n u e , d e f a u l t , do , echo , e l s e , e l s e i f , e x i t , extends , f o r , g l o b a l , i f , i n c l u d e , i n c l u d e once , or , p r i n t , r e q u i r e , r e q u i r e once , r e t u r n , s t a t i c , s w i t c h , then , var , w h i l e , xor , f o r e a c h , as , c l a s s , f u n c t i o n , new , e x t e n d s } , s e n s i t i v e ,% morecomment=[ l ]\# ,% morecomment=[ l ] / / ,% morecomment=[ s ] { / ∗ } { ∗ / } ,% m o r e s t r i n g =[b ] ” ,% m o r e s t r i n g =[b ] ’% } [ keywords , comments , s t r i n g s ] \ l s t d e f i n e s t y l e { nombres }{ numbers=l e f t , stepnumber =10 , n u m b e r s t y l e=\t i n y , numbersep=10pt } 5