Вы находитесь на странице: 1из 8

Sance no 9-bis

Prsenter du code source avec LaTeX

9.1

Verb et verbatim

Si on veut imprimer plusieurs lignes de code source, le plus simple est dutiliser lenvironnement {verbatim}. Par exemple, \begin{verbatim} forifrom1tondo L:=[op(L),i] od; \end{verbatim} donnera for i from 1 to n do L:=[op(L),i] od; La commande \verb permet dacher du code source dans le texte. Cest une commande la syntaxe dirente de celles quon a vu jusquici. On choisit dabord un caractre qui nest pas utilis dans ce quon veux acher verbatim, par exemple ', " ou | et ensuite, on tape \verb"\{#}" pour obtenir \{#}. Pour obtenir les bons caractres ', et " et , utiliser le package upquote. \usepackage{upquote} Noter que \verb (pas plus de {verbatim}) ne peut pas tre utilis dans largument dune commande. Il faut donc lemployer avec prcaution. Exercice 1. Taper les codes suivants avec la commande \verb. a. \newcommand{\abs}{\left|#1\right|} b. \verb"\carcode\ |=13" (le code utilis devra avoir deux \verb imbriqus) Solution de lexercice 1. Le premier sobtient avec \verb"\newcommand{\abs}{\left|#1\right|}" et le second avec, par exemple 1

S ance no 9-bis. Prsenter du code source avec LaTeX e

LM204

\verb!\verb"\carcode\ |=13"! On peut bien sr remplacer ! par, disons, & si on veut.

9.2

Package listings

Le problme avec {verbatim} est quil ne permet pas de colorer syntaxiquement le code source. Par exemple, le code \titlecontents{section}% [3.8em]% retrait gauche {\addvspace{0pt}}% materiel avant {\contentslabel{2.3em}}% avant lorsqu'il y a un numero {\hspace{-2.3em}}% avant lorsqu'il n'y a pas de numero {\titlerule*[0.75em]{.}\contentspage}% pts suspension et no de page [\addvspace{0pt}]% materiel apres nest pas aussi lisible quil pourrait ltre, comme dans \titlecontents{section}% [3.8em]%retraitgauche {\addvspace{0pt}}%materielavant {\contentslabel{2.3em}}%avantlorsqu'ilyaunnumero {\hspace{-2.3em}}%avantlorsqu'iln'yapasdenumero {\titlerule*[0.75em]{.}\contentspage}%ptssuspensionetnodepage [\addvspace{0pt}]%materielapres Attention, il ne faut pas mettre de lettres accentues lintrieur dun {lstlisting} (cest une limitation du package listings lorsquon utilise lencodage UTF8). Le package listings propose la commande \lstinline (qui fonctionne comme \verb), lenvironnement {lstlisting} (qui fonctionne comme {verbatim}) et une commande \lstinputlisting qui permet dinclure un chier externe \lstinputlisting[language=HTML]{index.html} Comme le montre lexemple prcdent, on peut mettre un certain nombre doptions entre crochets qui permettent de personnaliser la prsentation ainsi que dadapter le comportement du package listings la nature du code que lon tape. Comme on va le voir, le package listings est relativement puissant, mais il ses rglages par dfaut sont malheureusement extrmement contestables. Par exemple, le code prcdent est \ t i t l e c o n t e n t s { s e c t i o n }% [ 3 . 8 em]% r e t r a i t g a u c h e { \ a d d v s p a c e {0 p t }}% m a t e r i e l a v a n t { \ c o n t e n t s l a b e l { 2 . 3 em}}% a v a n t l o r s q u ' i l y a un numero { \ h s p a c e { 2.3em}}% a v a n t l o r s q u ' i l n ' y a p a s de numero { \ t i t l e r u l e * [ 0 . 7 5 em ] { . } \ c o n t e n t s p a g e }% p t s s u s p e n s i o n e t no de p a g e [ \ a d d v s p a c e {0 p t }]% m a t e r i e l a p r e s En plus de laspect esthtique inacceptable (police de caracre proportionnelle force tre monochasse), la copie dun bout de code partir du PDF est impossible (par exemple le mot \addvspace prcdent sort comme \addvspace) et le grand espacement quil y a autour des apostrophes ou des virgules peut conduire une ambigut sur la prsence ou non dune espace avant ou aprs ces symboles. Pour rgler tous ces problmes, on veillera, dans le prambule, aprs avoir charg le package avec 2

LM204

9.2. Package listings

\usepackage{listings} toujours mettre les lignes suivantes : \lstset{ upquote=true, columns=flexible, basicstyle=\ttfamily, } Le code prcdent ressemblera alors \titlecontents{section}% [3.8em]%retraitgauche {\addvspace{0pt}}%materielavant {\contentslabel{2.3em}}%avantlorsqu'ilyaunnumero {\hspace{-2.3em}}%avantlorsqu'iln'yapasdenumero {\titlerule*[0.75em]{.}\contentspage}%ptssuspensionetnodepage [\addvspace{0pt}]%materielapres On est revenu la mme chose que lexemple verbatim ci-dessus. Pour obtenir la coloration syntaxique, il faut spcier le language utilis ainsi que les styles adapts pour les mots-clefs. Pour xer ces paramtres pour tout le document, il sut de rajouter au prambule \lstset{ language=[LaTeX]TeX, texcsstyle=*\color{blue}, commentstyle=\color{gray}, } ce qui donnera \titlecontents{section}% [3.8em]%retraitgauche {\addvspace{0pt}}%materielavant {\contentslabel{2.3em}}%avantlorsqu'ilyaunnumero {\hspace{-2.3em}}%avantlorsqu'iln'yapasdenumero {\titlerule*[0.75em]{.}\contentspage}%ptssuspensionetnodepage [\addvspace{0pt}]%materielapres On constate quil manque des mots-clefs, savoir ceux dnis par le package \titletoc. Pour rectier ceci, il sut de rajouter les mots-clefs manquant en faisant : \lstset{ moretexcs={titlecontents,contentslabel,titlerule,contentspage} } ce qui donnera ce quon veut, savoir \titlecontents{section}% [3.8em]%retraitgauche {\addvspace{0pt}}%materielavant {\contentslabel{2.3em}}%avantlorsqu'ilyaunnumero {\hspace{-2.3em}}%avantlorsqu'iln'yapasdenumero {\titlerule*[0.75em]{.}\contentspage}%ptssuspensionetnodepage [\addvspace{0pt}]%materielapres 3

S ance no 9-bis. Prsenter du code source avec LaTeX e

LM204

Si on souhaite que les changement ne concernent pas tous les environnements {lstlisting} et tous les \lstinline, on peut les mettre dans un argument loptionnel de ces environnements, en faisant attention de mettre aux ventuels [ et ] qui tranent. Par exemple, on crira \begin{lstlisting}[language={[LaTeX]TeX}] ... \end{lstlisting} et non \begin{lstlisting}[language=[LaTeX]TeX] ... \end{lstlisting} (Dans ce cas, {lstlisting} crot que son argument optionnel est [language=[LaTeX] car il arrte sa lecture ou premier crochet fermant.) On peut aussi dnir des environnements et commandes spciales qui ont chacun leur rgagle, ce qui est utile si on utilise frquemment deux languages de programmation. titre dexemple, \lstnewenvironment{latexcode}[1][]{\lstset{language=[LaTeX]TeX,#1}}{} \newcommand{\ltxcode}[1][]{\lstinline[language=[LaTeX]TeX,#1]} On peut bien sr mettre autant doptions quon veut. Ceci permettra dutiliser \ltxcode"#&^_" la place de \lstinline"#&^_" tout en gardant la possibilit de spcier des options supplmentaires en argument optionnel et de mme pour \begin{latexcode} #&^_ \end{latexcode} Exercice 2. Dnir un environnement {code-latex} tel que \begin{code-latex} \usepackage[runin]{abstract} \abslabeldelim{.~---} \setlength{\abstitleskip}{-\parindent} %... \begin{abstract} Blablabla... \end{abstract} \end{code-latex} ache \usepackage[runin]{abstract} \abslabeldelim{.~---} \setlength{\abstitleskip}{-\parindent} %... \begin{abstract} Blablabla... \end{abstract}

Solution de lexercice 2. Voici le code utilis : \documentclass{article}%autreschoix:report,book 4

LM204

9.2. Package listings

\usepackage[utf8]{inputenc}%encodagedufichiersource \usepackage[T1]{fontenc}%gestiondesaccents(pourlespdf) \usepackage[francais]{babel}%autres:english,greek,etc. \usepackage{textcomp}%caracteresadditionnels \usepackage{amsmath,amssymb}%pourlesmaths \usepackage{lmodern}%variantes:txfonts,fourier,etc. \usepackage[a4paper]{geometry}%taillecorrectedupapier \usepackage{graphicx}%pourincluredesimages \usepackage{xcolor}%pourgererlescouleurs \usepackage{microtype}%ameliorationstypographiques \usepackage{listings}%pourlecodeinformatique \usepackage{hyperref}%gestiondeshyperliens \hypersetup{pdfstartview=XYZ}%zoompardefaut \lstnewenvironment{code-latex}[1][]{ \lstset{ upquote=true, columns=flexible, basicstyle=\ttfamily, language={[LaTeX]TeX}, texcsstyle=*\color{blue}, commentstyle=\color{gray}, moretexcs={abslabeldelim,setlength,abstitleskip}, #1 } }{} \begin{document} \begin{code-latex} \usepackage[runin]{abstract} \abslabeldelim{.~---} \setlength{\abstitleskip}{-\parindent} %... \begin{abstract} Blablabla... \end{abstract} \end{code-latex} \end{document}

Voici une petite liste des languages les plus courants qui sont disponibles : 5

S ance no 9-bis. Prsenter du code source avec LaTeX e [LaTeX]TeX Metapost Postscript PSTricks command.com bash HTML XML PHP SQL R Scilab MuPad Matlab Mathematica Gnuplot Python Ruby Perl Lisp VBScript Caml [Objective]Caml Java C C++ Asssembler

LM204 Basic Cobol Delphi Fortran Pascal

(Le language command.com est le batch de Windows.) Pour modier lespacement autour dun environnement \lstlisting, on utilise les paramtres suivants : \lstset{ xleftmargin=2em,%espaceagauche xrightmargin=2em,%espaceadroite aboveskip=\topsep,%espaceau-dessus belowskip=\topsep,%espaceen-dessous } Pour modier la prsentation, on dispose de divers options pour encadrer ou mettre sur fond color les environnements {lstlisting}. Par exemple, dans ce document, on a utilis \lstset{ frame=single, rulecolor=\color{green!5}, backgroundcolor=\color{green!5}, } Les autres options de prsentation sont dans la documentation. Il est possible dactiver la coupure automatique des lignes trop longues ainsi que lindentation leur appliquer (compter 0.5em par caractre) \lstset{ breaklines, breakindent=1.5em,%indentede3caracteresversladroite } Il est galement possible de faire une action avant et aprs chaque coupure avec les clefs postbreak et prebreak. Dans le language TeX, les mots-clefs sont contrls par texcsstyle et moretexcs, mais dans la plupart des autres languages, cest keywordstyle et morekeywords quil faut utiliser. Il est galement possible de montrer les espaces par des en utilisant showspaces=true. Exercice 3. Sachant que le code suivant est en HTML, obtenir la prsentation suivante <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <metacontent="text/html;charset=ISO-8859-1"http-equiv="contenttype"> <title>Titredelapageweb</title> <styletype="text/css"media="all">@import"css/style.css";</style> </head> 6

LM204

9.3. Complments

<!--debutdudocument--> <body> <p>Loremipsumdolorsitamet,consecteturadipisicingelit,seddo eiusmodtemporincididuntutlaboreetdoloremagnaaliqua.Utenim adminimveniam,quisnostrudexercitationullamcolaborisnisiut aliquipexeacommodoconsequat.Duisauteiruredolorin reprehenderitinvoluptatevelitessecillumdoloreeufugiatnulla pariatur.Excepteursintoccaecatcupidatatnonproident,suntin culpaquiofficiadeseruntmollitanimidestlaborum.</p> <center>Source:<ahref="http://www.lipsum.com/">lipsum.com</a></ center> </body> </html> Le chier source est attach ci-contre. Solution de lexercice 3. Voici les paramtres utiliss, mettre dans un \lstset ou dans un environnement dni exprs : upquote=true, columns=flexible, basicstyle=\ttfamily, language=HTML, keywordstyle=\color{blue}, commentstyle=\color{gray}, breaklines, breakindent=1.5em, xleftmargin=2em, xrightmargin=2em, frame=single, rulecolor=\color{orange}, backgroundcolor=\color{orange!5},

Il est possible de faire plein dautres choses avec listings, comme numroter les lignes, dnir plusieurs types de mots-clefs colors diremment, dnir des styles, des languages non disponibles, etc. On renvoie la documentation.

9.3

Complments

Un des dfauts de listings est que si on indente proprement son code comme par exemple \titlecontents{section}% [3.8em]%retraitgauche {\addvspace{0pt}}%materielavant {\contentslabel{2.3em}}%avantlorsqu'ilyaunnumero {\hspace{-2.3em}}%avantlorsqu'iln'yapasdenumero {\titlerule*[0.75em]{.}\contentspage}%ptssuspensionetnodepage [\addvspace{0pt}]%materielapres 7

S ance no 9-bis. Prsenter du code source avec LaTeX e

LM204

les espaces au dbut des lignes 2 7 sont perdus lors dun copi coll. Pour viter cela, on peut mettre les quelques lignes suivantes dans le prambule (cela revient rendre visibles les espaces puis les mettre de la bonne couleur pour quils ne se voient pas ; si la page nest pas blanche, il faut remplacer white par la couleur adquate) : \makeatletter \def\lst@outputspace{{\ifx\lst@bkgcolor\empty\color{white}\else \lst@bkgcolor\fi\lst@visiblespace}} \lst@keepspacestrue \makeatother Ce code peut ncessiter le package cmap pour fonctionner correctement.

Вам также может понравиться