largeur automatique pour listings

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

largeur automatique pour listings

Messagepar marco56 » Jeudi 20 Juin 2013, 19:04

Bonsoir,
Je souhaite utiliser le package listings pour y mettre du code python par exemple.
Je souhaiterais que la largeur de la boîte s'adapte automatiquement si possible et je ne trouve pas comment faire, après de nombreuses et fastidieuses recherches.
Le problème a été déjà abordé et des solutions ont été données par pg pour gérer automatiquement la largeur d'une boîte mais pas avec listings, qui est bien pratique, je trouve.
Voici un ECM qui marche mais dont la fenêtre grisée est trop large et je ne souhaite pas l'ajuster à la main.

Code: Tout sélectionner
\documentclass[11pt,a4paper]{book}
\usepackage[utf8]{inputenc}         
\usepackage{textcomp}   
\usepackage[francais]{babel}
\usepackage [T1]{fontenc}    
\usepackage{lmodern}

\usepackage{xcolor}
\usepackage{listings}

\begin{document}
\lstnewenvironment{python_list}{\lstset{breaklines=true,showspaces=false,framexleftmargin=5mm, frame=shadowbox, rulesepcolor=\color{black},backgroundcolor=\color{lightgray},linewidth=\textwidth,inputencoding=utf8}}{}

\begin{minipage}{10cm}
\begin{python_list}
#!/usr/bin/python
# -*- coding: utf-8 -*-

print("Hello")
\end{python_list}
\end{minipage}

\end{document}


Merci d'avance pour vos conseils.



[EDIT] Je précise que cela ne me dérange pas d'utiliser
Code: Tout sélectionner
\lstinputlisting[language=python]{fichier.py}
mais cela ne résout pas mes problèmes.
marco56
Giga-utilisateur
 
Messages: 765
Inscription: Jeudi 25 Novembre 2010, 22:10
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: largeur automatique pour listings

Messagepar pg » Mardi 25 Juin 2013, 21:55

On peut mesurer la taille du contenu avant de l'encadrer :

listings_taille_adaptee.png
listings_taille_adaptee.png (8.1 Kio) Vu 1570 fois


Code: Tout sélectionner
\documentclass[11pt,a4paper]{book}

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

\usepackage{xcolor}
\usepackage{listings}
\usepackage{geometry}

\lstset{upquote=true,
        columns=flexible,
        keepspaces=true,
        breaklines,
        breakindent=0pt,
        basicstyle=\ttfamily,
        commentstyle=\color{green!50!black},
        keywordstyle=\color{blue},
        language=Python}

\makeatletter
\newsavebox{\lstb@x}
\lstnewenvironment{python_list}
  {\setbox\lstb@x\hbox\bgroup\color@setgroup}
  {\color@endgroup\egroup\colorbox{gray!25}{\usebox{\lstb@x}}}
\makeatother

\begin{document}

\begin{python_list}
#!/usr/bin/python
# -*- coding: utf-8 -*-

print("Hello")
\end{python_list}

\end{document}
pg
Modérateur
 
Messages: 2595
Inscription: Jeudi 14 Juin 2007, 23:31

Re: largeur automatique pour listings

Messagepar marco56 » Mercredi 26 Juin 2013, 00:39

Magique ! :clapping:
Merci beaucoup !
marco56
Giga-utilisateur
 
Messages: 765
Inscription: Jeudi 25 Novembre 2010, 22:10
Statut actuel: Actif et salarié | Enseignant

Re: largeur automatique pour listings

Messagepar marco56 » Jeudi 27 Juin 2013, 21:08

Merci pg !
Évidemment, il s'avère que dans mon énorme fichier, cela ne fonctionne pas comme je voudrais.
Évidemment encore, c'est de ma faute car je ne comprends pas tout, loin de là !

En fait, une partie de mon code se trouve dans un fichier .sty mais je ne pense pas que ce soit le problème. J'ai essayé de faire un ECM et j'ai mis le code qui pose problème à la fin du document (après le \end{document}).

Le code se trouve ci-dessous :

Code: Tout sélectionner
\documentclass[11pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{geometry}



\lstset{upquote=true,
        columns=flexible,
        keepspaces=true,
        breaklines,
        breakindent=0pt,
        basicstyle=\ttfamily,
        commentstyle=\color{green!50!black},
        keywordstyle=\color{blue},
        language=Python}

\lstdefinestyle{mypython}{
inputencoding=utf8,
language=python,
showtabs=true,
tab=,
tabsize=2,
basicstyle=\ttfamily,
stringstyle=\color{black},
backgroundcolor=\color{green!20},
breakindent=.5\textwidth,frame=single,breaklines=true
}

\lstnewenvironment{python_cons}[1][]{\lstset{style=mypython}} {
}

\begin{document}

\begin{python_cons}
#!/usr/bin/python
# -*- coding: utf-8 -*-
print("Hello")
\end{python_cons}

\end{document}

\makeatletter
\newsavebox{\lstb@x}
\lstnewenvironment{python_cons}
{\setbox\lstb@x\hbox\bgroup\color@setgroup}
{\color@endgroup\egroup\colorbox{gray!25}{\usebox{\lstb@x}}}
\makeatother



Je ne sais pas où / comment mettre ce morceau de \lstb@x.
Si tu (ou quelqu'un d'autre) peux m'aider, cela fera mon bonheur !
marco56
Giga-utilisateur
 
Messages: 765
Inscription: Jeudi 25 Novembre 2010, 22:10
Statut actuel: Actif et salarié | Enseignant

Re: largeur automatique pour listings

Messagepar pg » Jeudi 27 Juin 2013, 21:36

Le bout du code doit être quelque part après le \usepackage{listings} (et après la définition du style mypython si on veut l'utiliser). Si le bout de code en question et dans un fichier sty, il faut enlever le \makeatletter et le \makeatother, car on peut utiliser librement les @ dans les fichiers sty.

Attention, la façon de faire de mon message précédent est incompatible avec l'utilisation de backgroundcolor. Il faut ajuster la couleur dans directement dans le code de {python_cons} :

Code: Tout sélectionner
\documentclass[11pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{geometry}

\lstset{upquote=true,
        columns=flexible,
        keepspaces=true,
        breaklines,
        breakindent=0pt,
        basicstyle=\ttfamily,
        commentstyle=\color{green!50!black},
        keywordstyle=\color{blue},
        language=Python}

\lstdefinestyle{mypython}{
        inputencoding=utf8,
        language=python,
        showtabs=true,
        tab=,
        tabsize=2,
        basicstyle=\ttfamily,
        stringstyle=\color{black},
        breaklines=true
}

\makeatletter % à enlever dans un fichier .sty
\newsavebox{\lstb@x}
\lstnewenvironment{python_cons}
  {\lstset{style=mypython}\setbox\lstb@x\hbox\bgroup\color@setgroup}
  {\color@endgroup\egroup\fcolorbox{black}{green!20}{\usebox{\lstb@x}}}
\makeatother % à enlever dans un fichier .sty

\begin{document}

\begin{python_cons}
#!/usr/bin/python
# -*- coding: utf-8 -*-
print("Hello")
\end{python_cons}

\end{document}
pg
Modérateur
 
Messages: 2595
Inscription: Jeudi 14 Juin 2007, 23:31

Re: largeur automatique pour listings

Messagepar marco56 » Jeudi 27 Juin 2013, 22:20

Tip top !
Un grand merci : j'ai compris un peu...
Reste à essayer dans mon gros fichier et je mettrai le sujet en résolu.
marco56
Giga-utilisateur
 
Messages: 765
Inscription: Jeudi 25 Novembre 2010, 22:10
Statut actuel: Actif et salarié | Enseignant

Re: largeur automatique pour listings

Messagepar marco56 » Jeudi 27 Juin 2013, 23:18

Youpi !
Tout fonctionne à merveille, le bonheur :bowdown:
Encore merci !
marco56
Giga-utilisateur
 
Messages: 765
Inscription: Jeudi 25 Novembre 2010, 22:10
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Google Adsense [Bot], Proximic [Spider] et 19 invités