Code Python en LaTeX

Tout ce qui concerne le langage LaTeX et ses variantes. Ce langage est supporté par le forum via les balises tex.

Modérateur : gdm_tex

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
ezize
Utilisateur confirmé
Utilisateur confirmé
Messages : 80
Inscription : samedi 05 août 2006, 13:01

Code Python en LaTeX

Message par ezize »

Bonjour,

En cherchant sur le web et en testant plusieurs choses avec la documentation, j'ai obtenu ce code :

Code : Tout sélectionner

\documentclass[11pt,a4paper]{book}

\usepackage{geometry}
\geometry{a4paper,textheight=26cm,textwidth=19cm,hcentering,top=1cm,footnotesep=.5cm}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}

\usepackage[usenames,dvipsnames,svgnames]{xcolor}

\usepackage{listings}
\lstset{
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
{œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
{ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
{ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
{€}{{\EUR}}1 {£}{{\pounds}}1
}
\lstdefinestyle{stylepython}{
        language=Python, 
        basicstyle=\ttfamily,
%       name=iciNOM,
        title={Un programme Python}, 
%       caption={iciTitre},
%       label={iciNom},
        commentstyle=\footnotesize\color{green!50!black}, 
        keywordstyle=\color{blue},   
        stringstyle=\color{olive},   
        numberstyle=\tiny,  
%       mathescape,  
%       showstringspaces=false,   
%       tabsize=2,   
        framexleftmargin=5mm,  
%       framexrightmargin=5pt,
%       framexbottommargin=5pt
        xleftmargin=0mm,  
        keepspaces=false,   
        classoffset=1,     
        numbers=left,    
        stepnumber=1,    
        numbersep=8pt,   
        showstringspaces=false,  
        frame=single,
        framerule=1pt,
        rulecolor=\color{yellow}, 
%       breaklines=true,  
%       rulesepcolor=\color{blue}, %avec frame=shadowsbox
        backgroundcolor=\color{yellow!30}
}

\pagestyle{empty}

\begin{document}

\begin{minipage}{8cm} %--------------------------------------

\begin{lstlisting}[style=stylepython]
#Ceci est un commentaire.
n=int(input("n = ?"))
if n<10:
   t=0.9*n
elif n<20:
   t=0.7*n
else:
   t=0.6*n
print(t)

\end{lstlisting}

\end{minipage} %--------------------------------------------

\end{document}
avec le résultat :

Image

Il me reste à savoir :

1- comment mettre le titre "Un programme Python" en bas à droite par exemple ?
2- comment diminuer l'espace, que je trouve très grand, entre les caractères dans le texte du programme ce qui fait allonger exagérément les lignes ?

Merci infiniment pour toute aide.
jmd
Utilisateur confirmé
Utilisateur confirmé
Messages : 47
Inscription : samedi 06 février 2016, 11:08

Re: Python en LaTeX

Message par jmd »

Bonjour,

Pour la question 1, il suffit de commenter (%) la ligne title="..." et en dehors de l'environnement \begin{lstlisting} ... \end{lstlisting} placer un titre dans un environnement flushright.

Pour la question 2, je pense qu'il faut remplacer \ttfamily dans \basicstyle par autre chose, je cherche par quoi.
En attendant, \basicstyle=\footnotestyle ou \basicstyle=\scriptsize.
ezize
Utilisateur confirmé
Utilisateur confirmé
Messages : 80
Inscription : samedi 05 août 2006, 13:01

Re: Python en LaTeX

Message par ezize »

Bonjour,
Merci pour votre aide... C'est une possibilité.

Je voudrais bien que ce soit comme avec l'environnement {algorithm2e} où l'on peut utiliser la commande \caption et numéroter ainsi les programmes Python écrits dans un documents et avoir, par exemple, "Programme 1" au lieu de "Listing 1" obtenu par défaut ici avec l'option caption.

J'avais essayé \basicstyle=\footnotestyle et \basicstyle=\scriptsize. C'est vrai que la longueur des lignes diminue un peu mais j'ai l'impression que l'espace entre caractères reste grand et en plus le rendu est inférieur à celui obtenu avec \basicstyle=\ttfamily.
jmd
Utilisateur confirmé
Utilisateur confirmé
Messages : 47
Inscription : samedi 06 février 2016, 11:08

Re: Code Python en LaTeX

Message par jmd »

Bonjour,

Pour répondre à la question 2, il faut ajouter columns = flexible à la liste des styles, ou aussi columns = fullflexible pour encore un peu plus de compression.
ezize
Utilisateur confirmé
Utilisateur confirmé
Messages : 80
Inscription : samedi 05 août 2006, 13:01

Re: Code Python en LaTeX

Message par ezize »

Merci bien... c'est vrai que ça compresse et réduit globalement même si l'espace entres caractères surtout celui des "messages" et des #commentaires restent proportionnellement inchangé.

Il reste surtout le problème du titre...
jmd
Utilisateur confirmé
Utilisateur confirmé
Messages : 47
Inscription : samedi 06 février 2016, 11:08

Re: Code Python en LaTeX

Message par jmd »

Peut-être essayer de mettre l'environnement lstlisting dans un environnement figure, pour lequel on peut modifier le label...

Quant au problème "de titre", une solution a déjà été proposée... et personnellement je n'ai jamais vu un titre après le texte... mais bon, chacun son truc...
ezize
Utilisateur confirmé
Utilisateur confirmé
Messages : 80
Inscription : samedi 05 août 2006, 13:01

Re: Code Python en LaTeX

Message par ezize »

Bonsoir,

Merci bien jmd pour ton aide...