[Résolu] Boîte autour d'un bloc verbatim

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.

[Résolu] Boîte autour d'un bloc verbatim

Messagepar pzorba75 » Mercredi 16 Octobre 2019, 16:53

Bonjour à tous,
je cherche à encadrer un bloc verbatim, j'ai essayé fbox{ } et j'ai une erreur de compilation, alors que sans bloc verbatim tout se passe bien.
Quelle est la méthode pour tracer un cadre autour d'un bloc verbatim en ajustant la largeur du cadre?
Je mets le bloc à encadrer :
Code: Tout sélectionner
\begin{verbatim}
                 Algorithme
Pour tout i entre 0 et k-2, on compare
L[i] et L[i+1] :
- si L[i]<)L[i+1], on ne fait rien
- si L[i]>L[i+1], on échange L[i]
  et L[i+1]
\end{verbatim}

Merci de l'aide apportée.
Pierre
Dernière édition par pzorba75 le Mercredi 16 Octobre 2019, 18:25, édité 1 fois.
On se lasse de tout, excepté d'apprendre.
Virgile
pzorba75
Kilo-utilisateur
 
Messages: 174
Inscription: Mardi 20 Août 2013, 03:50
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Boîte autour d'un bloc verbatim

Messagepar evariste_G » Mercredi 16 Octobre 2019, 17:48

Une recherche sur ton moteur préféré peut te conduire à l'environnement boxedverbatim:

Code: Tout sélectionner
\documentclass{article}
\usepackage{moreverb}
\begin{document}
\begin{boxedverbatim}
                 Algorithme
Pour tout i entre 0 et k-2, on compare
L[i] et L[i+1] :
- si L[i]<)L[i+1], on ne fait rien
- si L[i]>L[i+1], on échange L[i]
  et L[i+1]
\end{boxedverbatim}
\end{document} 


Capture.PNG
Capture.PNG (10.01 Kio) Vu 133 fois
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1433
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Boîte autour d'un bloc verbatim

Messagepar un bon petit » Mercredi 16 Octobre 2019, 18:01

evariste_G a écrit:Une recherche sur ton moteur préféré peut te conduire à l'environnement boxedverbatim

Certes, mais le coder est très simple et bien plus amusant :

Code: Tout sélectionner
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\makeatletter
\def\verbbox{\expandafter\verbbox@a\string}
\def\verbbox@a#1{%
   \def\verbbox@b##1#1{%
      \fbox{\vtop{\hbox\bgroup##1\egroup}}%
      \endgroup
      }%
   \begingroup
      \let\do\@makeother\dospecials
      \def\par{\egroup\hbox\bgroup}%
      \obeylines\obeyspaces
      \verbatim@font\@noligs
      \verbbox@b
}
\makeatother
\begin{document}
Mon algo : \verbbox|                 Algorithme
Pour tout i entre 0 et k-2, on compare
L[i] et L[i+1] :
- si L[i]<)L[i+1], on ne fait rien
- si L[i]>L[i+1], on échange L[i]
  et L[i+1]| est tout beau
\end{document}

fboxverb.png


@balf, @pg, @denisBitouzé : avant que je ne fasse une bêtise de plus aujourd'hui et que je ne fasse remonter un bug qui n'en est pas un : vous confirmez qu'il y a un bug dans le noyau latex dans la macro \do@noligs ???
Selon moi, il manque un \relax (ou un espace) après la définition du caractère actif pour stopper la lecture du nombre `#1. Ainsi, la ligne 4499 qui est
Code: Tout sélectionner
\lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}}

devrait être
Code: Tout sélectionner
 \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1\relax}}}

Ce bug explique pourquoi les espaces sont mangés après les tirets dans mon exemple.
un bon petit
Giga-utilisateur
 
Messages: 748
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Boîte autour d'un bloc verbatim

Messagepar pzorba75 » Mercredi 16 Octobre 2019, 18:24

C'est exactement ce que je cherchais, mais google m'avait conduit dans une multitude pages sur les commandes mbox, makebox, frbox...qui ne conviennent pas dès qu'il y a un bloc verbatim à l'intérieur.
Merci beaucoup pour cette réponse très complète.
Pierre
On se lasse de tout, excepté d'apprendre.
Virgile
pzorba75
Kilo-utilisateur
 
Messages: 174
Inscription: Mardi 20 Août 2013, 03:50
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant

Re: Boîte autour d'un bloc verbatim

Messagepar pg » Mercredi 16 Octobre 2019, 19:24

un bon petit a écrit:@balf, @pg, @denisBitouzé : avant que je ne fasse une bêtise de plus aujourd'hui et que je ne fasse remonter un bug qui n'en est pas un : vous confirmez qu'il y a un bug dans le noyau latex dans la macro \do@noligs ???
Selon moi, il manque un \relax (ou un espace) après la définition du caractère actif pour stopper la lecture du nombre `#1. Ainsi, la ligne 4499 qui est
Code: Tout sélectionner
\lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}}

devrait être
Code: Tout sélectionner
 \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1\relax}}}

Ce bug explique pourquoi les espaces sont mangés après les tirets dans mon exemple.

Il manque aussi les espaces entre les virgules et les trois "on". Les commandes de type verbatim utilisent \@vobeyspaces pour résoudre le problème.
pg
Modérateur
 
Messages: 2597
Inscription: Jeudi 14 Juin 2007, 23:31

Re: Boîte autour d'un bloc verbatim

Messagepar un bon petit » Jeudi 17 Octobre 2019, 16:34

pg a écrit:Les commandes de type verbatim utilisent \@vobeyspaces pour résoudre le problème.

Je sais bien que rendre l'espace actif \let-égal à \@xobeysp résout le problème évite que le problème ne survienne.

Mais si un utilisateur trop confiant (comme moi) souhaite désactiver les ligatures en police à chasse fixe, il obtient un résultat où les espaces après les caractères « , », « > », « < », « ` », « ' » et « - » sont mangés, ce qui n'est pas le comportement attendu comme on peut le constater sur cet ECM :
Code: Tout sélectionner
\documentclass{article}
\makeatletter
\newenvironment{ttnolig}{\ttfamily\@noligs}{}
\makeatother
\begin{document}
Un essai \begin{ttnolig}1, 2 - 3 - et 4\end{ttnolig}.
\end{document}

Je persiste donc à dire qu'il y a bien une erreur dans la macro \do@noligs :mrgreen:
un bon petit
Giga-utilisateur
 
Messages: 748
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: [Résolu] Boîte autour d'un bloc verbatim

Messagepar pg » Jeudi 17 Octobre 2019, 16:50

Je suis arrivé à la même conclusion, mais ce que je suggérais implicitement est que je ne suis pas sûr que \@noligs soit prévu pour être utilisé sans rendre les espaces actifs auquel cas on ne peut pas vraiment parler de bug.
pg
Modérateur
 
Messages: 2597
Inscription: Jeudi 14 Juin 2007, 23:31

Re: [Résolu] Boîte autour d'un bloc verbatim

Messagepar un bon petit » Jeudi 17 Octobre 2019, 17:25

pg a écrit:Je suis arrivé à la même conclusion, mais ce que je suggérais implicitement est que je ne suis pas sûr que \@noligs soit prévu pour être utilisé sans rendre les espaces actifs auquel cas on ne peut pas vraiment parler de bug.

Il faut que l'espace soit actif ET que son développement ne commence pas par un espace. Ça fait un peu beaucoup, je trouve...
D'ailleurs, si on rend l'espace actif avec \obeyspaces ( ce qui renvient à faire \let<espace>=\space) comme je l'avais innocemment fait, on est confronté au "bug".

Ensuite quand je vois sur la documentation de source2e, en haut de la page 291 ceci :
To stay compatible with packages that use \@noligs we keep it.

ce qui suggère que cette macro est utilisée uniquement dans des packages extérieurs au noyau (ce qui est faux en plus, puisque latex l'utilise plusieurs fois), je me demande bien que faire car les auteurs des packages vont subir le "bug" puisqu'il n'est précisé nulle part comment l'éviter. Je crois que je vais quand même poster une « issue » sur github, d'autant que le "bug" est ultra-facile à corriger.
un bon petit
Giga-utilisateur
 
Messages: 748
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
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], Yandex [Bot] et 7 invités

cron