Verbatim + boite

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.

Verbatim + boite

Messagepar zariski63 » Jeudi 03 Mai 2018, 17:31

Bonjour !
Je m'adresse aux chevronnés de TeX car mon problème est somme toute assez pointu, enfin pour moi en tout cas.
Je souhaiterais enfermer dans une boite du code (asymptote en l'occurrence mais peu importe).
La boite aurait pour largeur la largeur du code en question calculée au préalable; et c'est là où je coince.
Cela fonctionne pour enfermer le code dans la boite mais je n'arrive pas à récupérer la bonne largeur qui reste bloquée à 569pt (20cm).

Voici un peu de mon œuvre avec quelques trucs glanés de ci de là :

Code: Tout sélectionner
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}

\usepackage[a4paper,left=0.5cm,right=0.5cm,bottom=1.5cm,top=0.5cm]{geometry}

\usepackage{Eric-Packages}
\usepackage{Eric-Couleurs}
\usepackage{Eric-Verbatim}

\usepackage{verbatim}
\makeatletter
\newwrite{\temp@listing@out}
\newenvironment{exemple}{%
   \immediate\openout\temp@listing@out\jobname-temp.tex
   \bgroup\@bsphack
   \let\do\@makeother\dospecials
   \catcode`\^^M\active
   \def\verbatim@processline{%
        \immediate\write\temp@listing@out{\the\verbatim@line}%
        }%
   \verbatim@start
   }
  {
   \@esphack\egroup
   \immediate\closeout \temp@listing@out
   % création d'une boite
      \newbox\foobox
   % je remplis la boite avec du code asymptote
      \setbox\foobox=\vtop{\lstinputlisting[style=Asy]{\jobname-temp.tex}}
   % création d'une dimension \largeur
      \newdimen\largeur
   % \largeur est la largeur de la boite contenant le listing
      \largeur=\wd\foobox
   % cosmétique à la tikz pour présenter le dit code
      \begin{tikzpicture}[baseline]
         \node[draw=blue,
               fill=yellow!20,
               very thick,
               rectangle,
               rounded corners,
               inner sep=10pt,
               inner ysep=10pt,
               text width=\largeur]{\box\foobox
                                     \par
                                     Largeur = \the\largeur
                                    };
      \end{tikzpicture}
   }
\makeatother




\begin{document}


\begin{exemple}
void draw(picture  pic = currentpicture,// image contenant le dessin
            Label  L = "",              // texte
             path  g,                   // chemin(obligatoire)
            align  align = NoAlign,     // alignement du texte
              pen  p = currentpen,      // plume
         arrowbar  arrow = None,        // fleche
         arrowbar  bar = None,          // barre
           margin  margin = NoMargin,   // espace avant/apres
            Label  legend = "",         // legende
           marker  marker = nomarker    // marqueur
          );
\end{exemple}


\end{document}

Fichiers joints
essai.pdf
(53.68 Kio) Téléchargé 23 fois
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Verbatim + boite

Messagepar Denis Bitouzé » Jeudi 03 Mai 2018, 17:47

Je réponds un peu à côté, mais peut-être l'une des libraires `listings',
`listingsutf8' et `minted' du package `tcolorbox' pourrait-elle vous
intéresser
Denis
Denis Bitouzé
Hecto-utilisateur
 
Messages: 58
Inscription: Vendredi 27 Octobre 2006, 19:27
Localisation: Dunkerque
Statut actuel: Actif et salarié | Maître de conférence

Re: Verbatim + boite

Messagepar un bon petit » Jeudi 03 Mai 2018, 17:47

zariski63 a écrit:La boite aurait pour largeur la largeur du code en question calculée au préalable; et c'est là où je coince.

Vous faites encore la même erreur : vous pensez qu'en mettant du matériel dans une boite verticale, cette dernière adapte sa largeur au matériel. Autant c'est vrai pour une \hbox, autant c'est faux pour les \vbox et \vtop. Sans autre précision, une boite verticale dans laquelle vous composez un paragraphe a pour largeur \hisze, c'est d'ailleurs la largeur que vous récupérez ce qui est logique.

Code: Tout sélectionner
\documentclass{article}
\usepackage[a4paper,margin=1cm,]{geometry}
\begin{document}
\setbox0=\vbox{a\par bla bla bla}
\the\wd0

19 cm vaut en pts : \the\dimexpr19cm\relax
\end{document}


Vous ne pouvez donc pas procéder comme ça. C'est à vous de fixer la largeur finale du cadre, en retirer les épaisseurs des traits et des marges, puis fixer la largeur de la boite verticale au résultat trouvé.
un bon petit
Giga-utilisateur
 
Messages: 691
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Verbatim + boite

Messagepar zariski63 » Jeudi 03 Mai 2018, 18:08

fouya je suis pas sorti de l'auberge ... :?
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: Verbatim + boite

Messagepar zariski63 » Vendredi 04 Mai 2018, 08:02

Là cela dépasse mes compétence ...
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: Verbatim + boite

Messagepar rebouxo » Vendredi 04 Mai 2018, 09:47

Denis Bitouzé a écrit:Je réponds un peu à côté, mais peut-être l'une des libraires `listings',
`listingsutf8' et `minted' du package `tcolorbox' pourrait-elle vous
intéresser


Je plussoie très fort. J'ai l'impression que tu cherches à réinventer la roue (et ici, la roue est TeXnique...)
Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6901
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Re: Verbatim + boite

Messagepar zariski63 » Vendredi 04 Mai 2018, 13:40

J'ai dû mal me faire comprendre ...
En fait grâce à "un bon petit" je viens de trouver peut être la solution :
il suffit d'écrire :

Code: Tout sélectionner
  % je remplis la boite avec du code asymptote
      \setbox\foobox=\vtop{%
           \offinterlineskip\null\kern-1ex\hbox{%
            \lstinputlisting[style=Asy]{\jobname-temp.tex}}
           }
  %


Je sais que la solution est souvent TeXnique. Malheureusement j'ai peu de temps pour travailler TeX, langage relativement difficile.
La grosse partie de mon code n'est pas de moi ...

Merci encore "un bon petit" !!!
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: Verbatim + boite

Messagepar un bon petit » Vendredi 04 Mai 2018, 16:14

zariski63 a écrit:En fait grâce à "un bon petit" je viens de trouver peut être la solution

Ben non, la solution est évidente si \lstinputlisting peut être mis dans une boite horizontale (ce qui m'étonne si le listing a plus d'une ligne mais bon).
Dans ce cas, autant écrire
Code: Tout sélectionner
\setbox\foobox=\hbox{\lstinputlisting[style=Asy]{\jobname-temp.tex}}

et ensuite, mesurer la boite numéro \foobar !
un bon petit
Giga-utilisateur
 
Messages: 691
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Verbatim + boite

Messagepar zariski63 » Vendredi 04 Mai 2018, 17:17

Ah oui aussi !
Par contre, un problème résolu en amène un autre ...

Y a un problème avec les item :

un item disparaît avec le code suivant :

Code: Tout sélectionner
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}

\usepackage[a4paper,left=0.5cm,right=0.5cm,bottom=1.5cm,top=0.5cm]{geometry}

\usepackage{Eric-Packages}
\usepackage{Eric-Couleurs}
\usepackage{Eric-Verbatim}



\usepackage{verbatim}
\makeatletter
\newwrite{\temp@listing@out}
\newenvironment{exemple}[1]{%
   \def\couleurfond{#1}
   \immediate\openout\temp@listing@out\jobname-temp.tex
   \bgroup
   \@bsphack
   \let\do\@makeother\dospecials
   \catcode`\^^M\active
   \def\verbatim@processline{%
        \immediate\write\temp@listing@out{\the\verbatim@line}%
        }%
   \verbatim@start
   }
  {
   \@esphack
   \egroup
   \immediate\closeout \temp@listing@out
   % création d'une boite
      \newbox\foobox
   % je remplis la boite avec du code asymptote
      \setbox\foobox=\hbox{%
            \lstinputlisting[style=Asy]{\jobname-temp.tex}}
   % création d'une dimension \largeur
      \newdimen\largeur
   % \largeur est la largeur de la boite contenant le listing
      \largeur=\wd\foobox
   % cosmétique à la tikz pour présenter le dit code
     \begin{tikzpicture}[baseline]
         \node[text width=\largeur ,
               draw=blue,
               fill=\couleurfond,
               very thick,
               rectangle,
               rounded corners,
               %inner sep=10pt,
               inner ysep=-2pt,
               ]{\lstinputlisting[style=Asy]{\jobname-temp.tex}};
      \end{tikzpicture}
   }
\makeatother

\begin{document}


\begin{enumerate}[leftmargin=5ex,parsep=2ex,itemsep=0cm,topsep=0cm,
                    label=\textbf{\alph*.}]
\item bla bla bla

\begin{exemple}{yellow!20}
bla bla bla bla bla bla bla bla bla bla bla bla bla bla

bla bla bla bla bla bla bla bla bla blabla bla bla bla
\end{exemple}

\item

\begin{exemple}{red!20}
unitsize(1cm);
draw(pic = currentpicture,
       L = Label("Eric",Relative(0.5),Center,red,Fill(yellow)),
       g = (0,0)..(2,1)..(4,0),
   align = NoAlign,
       p = 2pt + black,
   arrow = ArcArrow(DefaultHead, 5mm, 20, FillDraw(blue,red)),
     bar = BeginBar(2mm),
  legend = "",
  marker = nomarker);
\end{exemple}
\end{enumerate}

\end{document}
Fichiers joints
essai.pdf
(55.78 Kio) Téléchargé 20 fois
Dernière édition par zariski63 le Vendredi 04 Mai 2018, 17:41, édité 1 fois.
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: Verbatim + boite

Messagepar un bon petit » Vendredi 04 Mai 2018, 17:30

zariski63 a écrit:un item disparaît avec le code suivant

Sauf que le code suivant n'est pas un ECM, il ne se termine même pas par \end{document}.
Afin d'obtenir de l'aide, pourriez-vous élaborer un vrai ECM, c'est à dire compilable par n'importe qui (sans recours à des packages perso) ?
un bon petit
Giga-utilisateur
 
Messages: 691
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Verbatim + boite

Messagepar zariski63 » Vendredi 04 Mai 2018, 18:10

Au temps pour moi


Code: Tout sélectionner
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}

\usepackage[a4paper,left=0.5cm,right=0.5cm,bottom=1.5cm,top=0.5cm]{geometry}

\usepackage{enumitem}
\usepackage{listings}
\usepackage{verbatim}
\makeatletter
\newwrite{\temp@listing@out}
\newenvironment{exemple}[1]{%
   \def\couleurfond{#1}
   \immediate\openout\temp@listing@out\jobname-temp.tex
   \bgroup
   \@bsphack
   \let\do\@makeother\dospecials
   \catcode`\^^M\active
   \def\verbatim@processline{%
        \immediate\write\temp@listing@out{\the\verbatim@line}%
        }%
   \verbatim@start
  }
  {
   \@esphack
   \egroup
   \immediate\closeout \temp@listing@out
   % création d'une boite
      \newbox\foobox
   % je remplis la boite avec du code asymptote
      \setbox\foobox=\hbox{\lstinputlisting{\jobname-temp.tex}}
   % création d'une dimension \largeur
      \newdimen\largeur
   % \largeur est la largeur de la boite contenant le listing
      \largeur=\wd\foobox
   % cosmétique à la tikz pour présenter le dit code
     \fbox{
     \begin{minipage}{\largeur}
        \lstinputlisting{\jobname-temp.tex}
     \end{minipage}
     }
   }
\makeatother







\begin{document}


\begin{enumerate}[leftmargin=5ex,parsep=2ex,itemsep=0cm,topsep=0cm,
                    label=\textbf{\alph*.}]
\item bla bla bla

\begin{exemple}{yellow!20}
bla bla bla bla bla bla bla bla bla bla bla bla bla bla

bla bla bla bla bla bla bla bla bla blabla bla bla bla
\end{exemple}

\item

\begin{exemple}{red!20}
unitsize(1cm);
draw(pic = currentpicture,
       L = Label("Eric",Relative(0.5),Center,red,Fill(yellow)),
       g = (0,0)..(2,1)..(4,0),
   align = NoAlign,
       p = 2pt + black,
   arrow = ArcArrow(DefaultHead, 5mm, 20, FillDraw(blue,red)),
     bar = BeginBar(2mm),
  legend = "",
  marker = nomarker);
\end{exemple}
\end{enumerate}



\end{document}
Fichiers joints
essai.pdf
(23.53 Kio) Téléchargé 19 fois
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: Verbatim + boite

Messagepar un bon petit » Vendredi 04 Mai 2018, 18:26

Ajouter \leavevmode au début de l'environnement exemple pour quitter le mode V.
Et surtout, virer les \newbox et \newdimen de l'environnement car à chaque appel vous allouerez des ressources non nécessaires.

J'en profite pour vous dire que votre dimension \largeur ne sert à rien, mettez \wd\foobox directement dans l'argument de minipage.
un bon petit
Giga-utilisateur
 
Messages: 691
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Verbatim + boite

Messagepar zariski63 » Vendredi 04 Mai 2018, 18:39

Raaaah du feu de dieu tout ça !!!!!

MERCIIIIIIII
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
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: Bing [Bot], Exabot [Bot], Google [Bot], Google Adsense [Bot], Grapeshot [Crawler] et 21 invités