--- myst: html_meta: keywords: LaTeX, langages de programmation, mise en forme de code, coloration syntaxique, formater un programme,formater du code, verbatim, insérer du code-source, listing informatique, listings, listing, tcolorbox" --- # Comment présenter du code informatique avec le package  ? est un package très puissant dédié à l'encadrement du texte. Il dispose notamment de deux bibliothèques (« *library* » dans la documentation) utiles pour présenter du code informatique. Ces deux bibliothèques `listings` et `minted` utilisent les packages des mêmes noms et permettent de faire des mises en page élaborées simplement. ## Bibliothèque `listings` :::{admonition} Info :class: tip Pour bien comprendre cette partie, il est conseillé de lire [](/4_domaines_specialises/informatique/inserer_du_code_source_informatique_listings.md). ::: :::{note} - Cette bibliothèque est conseillée si on compile en `pdflatex` - L’utilisation de cette bibliothèque charge automatiquement ::: perment de définir (généralement dans le préambule) une boîte de type `tcblisting` utilisant pour afficher le code. Le style de cette boîte, les paramètres optionnels de et le nom de la boîte sont alors définis pour l’ensemble du document. (listings-premiere-box)= ### Une première boîte Dans l’exemple ci-dessous, on reconnaît les options de . :::{attention} Le réglage pour les accents ne semble pas pouvoir être indiqué dans la définition de la boîte. Il faut le faire via `\lstset{}`. ::: ``` \documentclass[french]{article} \usepackage[T1]{fontenc} \usepackage{xcolor} \usepackage{babel} \usepackage{tcolorbox} \tcbuselibrary{listings} % Création de ma boîte \newtcblisting{boxPython}{ colback=black!5!white, title= Extrait de code Python, listing only, listing options={ language=python, keywordstyle = \color{green!60!black}, keywordstyle = {[2]\color{orange}}, commentstyle = \color{gray}\itshape, stringstyle = \color{blue}, showstringspaces=false, numbers = left, numberstyle = \tiny, stepnumber=1, numbersep = 25pt }, } % réglage de listings pour les accents \lstset{ literate= {é}{{\'e}}1 {è}{{\`{e}}}1 {ê}{{\^{e}}}1 {ë}{{\¨{e}}}1 {É}{{\'{E}}}1 {Ê}{{\^{E}}}1 {û}{{\^{u}}}1 {ù}{{\`{u}}}1 {â}{{\^{a}}}1 {à}{{\`{a}}}1 {Â}{{\^{A}}}1 {ç}{{\c{c}}}1 {Ç}{{\c{C}}}1 {ô}{{\^{o}}}1 {Ô}{{\^{O}}}1 {î}{{\^{i}}}1 {Î}{{\^{I}}}1, } \begin{document} \begin{boxPython} # Une première boucle for i in range(0,5): print(i) # Une autre boucle while i != "4": print("Et on est reparti pour un tour de plus !!!") \end{boxPython} \end{document} ``` ### Une boîte un peu plus élaborée :::{admonition} Info :class: tip - Pour la boîte ci-dessous, on utilise un package supplémentaire, , pour le symbole de `Python`. - On utilise également la bibliothèque `skins` qui permet de passer l’option `enhanced` à la boîte et ainsi de pouvoir régler l’aspect du titre. ::: ``` \documentclass[french]{article} \usepackage[T1]{fontenc} \usepackage{xcolor} \usepackage{fontawesome5} \usepackage{babel} \usepackage{tcolorbox} \tcbuselibrary{skins, listings} \newtcblisting{boxPython}{ enhanced, colback=black!3!white, toprule=1pt, bottomrule=1pt, leftrule=0pt, rightrule=0pt, arc=0mm, attach boxed title to top left={yshift=-9pt, xshift=4pt}, title = \textcolor{blue!80!black}{\faPython}, coltitle= black, boxed title style={colback=white}, listing only, listing options={ language=python, breaklines, keywordstyle = \color{green!60!black}, keywordstyle = {[2]\color{orange}}, commentstyle = \color{gray}\itshape, stringstyle = \color{blue}, showstringspaces=false, numbers = left, numberstyle = \tiny, stepnumber=1, numbersep = 20pt }, } % pour les accents \lstset{ literate= {é}{{\'e}}1 {è}{{\`{e}}}1 {ê}{{\^{e}}}1 {ë}{{\¨{e}}}1 {É}{{\'{E}}}1 {Ê}{{\^{E}}}1 {û}{{\^{u}}}1 {ù}{{\`{u}}}1 {â}{{\^{a}}}1 {à}{{\`{a}}}1 {Â}{{\^{A}}}1 {ç}{{\c{c}}}1 {Ç}{{\c{C}}}1 {ô}{{\^{o}}}1 {Ô}{{\^{O}}}1 {î}{{\^{i}}}1 {Î}{{\^{I}}}1, } \begin{document} \begin{boxPython} # Une première boucle for i in range(0,5): print(i) # Une autre boucle while i != 4: print("Et on est reparti pour un tour de plus !!!") \end{boxPython} \end{document} ``` :::{tip} On remarque que lorsque le retour à la ligne se fait manuellement, comme dans [](listings-premiere-box), il compte pour une ligne supplémentaire, ne correspondant pas nécessairemente au code voulu. Pour pallier ce problème, on a passé `breaklines` en paramètre optionnel de la boîte. ::: ### Bibliothèque minted On procède de manière très similaire à ce qui à été vu ci-dessus, mais on peut constater que moins d’options sont nécessaires. :::{admonition} Info :class: tip Pour bien comprendre cette partie, il est conseillé de lire [](/4_domaines_specialises/informatique/inserer_du_code_source_informatique_minted.md). ::: ```{noedit} \documentclass[french]{article} \usepackage[T1]{fontenc} \usepackage{xcolor} \usepackage{fontawesome5} \usepackage{babel} \usepackage{tcolorbox} \tcbuselibrary{minted, skins} % Création de ma box \newtcblisting{boxPython}{ enhanced, colback=black!3!white, toprule=1pt, bottomrule=1pt, leftrule=0pt, rightrule=0pt, arc=0mm, attach boxed title to top left={yshift=-9pt, xshift=4pt}, title = \textcolor{blue!80!black}{\faPython}, coltitle= black, boxed title style={colback=white}, listing engine=minted, listing only, minted language=python, minted options={breaklines, autogobble, linenos, numbersep=8mm}, } \begin{document} \begin{boxPython} # Une première boucle for i in range(0,5): print(i) # Une autre boucle while i != "4": print("Encore ? Eh bien oui, on est reparti pour un tour de plus !!!") \end{boxPython} \end{document} ``` La compilation du code donne : ![](/_static/images/minted_tcolorbox.png)