Ajuster en largeur un listing sous \(\LaTeX\)
Cet article est inspiré du post du forum mathematex dont l’adresse est : http://forum.mathematex.net/latex-f6/cadre-pour-algorithme-python-avec-listings-t17255.html
L’idée est ici de créer un environnement “python” (par exemple) qui permet d’écrire un code Python et de le présenter encadré de sorte que le cadre soit ajusté en largeur (ce qui n’est pas le cas par défaut car le cadre tient sur toute la largeur).
Avant tout, le visuel basique
Le code \(\LaTeX\)
Comme vous pouvez le voir sur les visuels, on peut mettre les nombres à l’intérieur ou à l’extérieur du cadre. On va donc créer un environnement avec une option.
\documentclass{article} \usepackage{listingsutf8} \newlength\largeurboxlisting \newsavebox{\pythonbox}% \lstnewenvironment{python}[1][5]{% \begingroup \lrbox{\pythonbox}% \lstset{% language=python, basicstyle=\ttfamily, numbers=left }% }{% \endlrbox\endgroup \settowidth{\largeurboxlisting}{\usebox\pythonbox} \fbox{ \begin{minipage}{\dimexpr\largeurboxlisting+#1mm} \hspace*{#1mm}\usebox\pythonbox \end{minipage} } } \begin{document} \begin{python} def temp(a,b): return a+b temp(1,2) \end{python} \end{document}
L’option sert donc ici à spécifier le décalage. Par défaut, on va décaler de 5 mm vers la droite le listing, permettant ainsi aux nombres d’apparaître dans le cadre. Si on souhaite qu’ils soient à l’extérieur du cadre, on mettra se décalage à 0:
\begin{python}[0] def temp(a,b): return a+b temp(1,2) \end{python}
Un meilleur rendu
Les plus perfectionnistes auront sans doute envie d’une présentation plus agréable. On peut utiliser TiKZ (ou PSTricks) pour optimiser l’affichage, ainsi que les diverses options du package listings.
On pourra alors se baser sur l’exemple suivant est ajuster en fonction de nos préférences.
\documentclass{article} \usepackage{listingsutf8} \usepackage{tikz} \newlength\largeurboxlisting \newsavebox{\pythonbox}% \lstnewenvironment{python}[1][5]{% \begingroup \lrbox{\pythonbox}% \lstset{% language = python, inputencoding=utf8, basicstyle = \ttfamily, numbers = left, numberstyle = \color{gray}\tiny, tabsize = 2, showstringspaces = false, keywordstyle = \color{orange}\bfseries, commentstyle = \color{green!50!black}\itshape, stringstyle=\color{yellow!50!black}, emph = {somme}, emphstyle = \color{red!50!black}, literate= {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1 {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1 {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1 {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1 {Ã}{{\~A}}1 {ã}{{\~a}}1 {Õ}{{\~O}}1 {õ}{{\~o}}1 {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 }% }{% \endlrbox\endgroup \settowidth{\largeurboxlisting}{\usebox\pythonbox} \tikz\node[% rounded corners = 3pt, line width = 1pt , draw = blue!50!black , fill = blue!10 , inner sep = 3mm] { \begin{minipage}{\dimexpr\largeurboxlisting+#1mm} \hspace*{#1mm}\usebox\pythonbox \end{minipage} }; } \begin{document} \begin{python} # On définit la fonction def somme(a,b): return a+b print('Le résultat est' , somme(1,2)) \end{python} \end{document}
Articles relatifs:
Stéphane Pasquet
Derniers articles
Commentaires récents
- Stéphane Pasquet dans Manipuler sa webcam en Python
- Cimawills dans Manipuler sa webcam en Python
- Stéphane Pasquet dans Créer un exécutable sous Windows à partir d’un programme Python
- GILBERT dans Créer un exécutable sous Windows à partir d’un programme Python
- Salah dans Créer un exécutable sous Windows à partir d’un programme Python