Discussion:
Encadrer un texte
(trop ancien pour répondre)
Julien V
2006-05-26 15:47:53 UTC
Permalink
Bonjour,

Je souhaite encadrer un texte. Pour cela, j'utilise l'exemple de la FAQ
:

\newsavebox{\fmbox}
\newenvironment{exemple}[1]
{\noindent\begin{lrbox}{\fmbox}\begin{minipage}{#1}}
{\end{minipage}\end{lrbox}\fbox{\usebox{\fmbox}}\indent}

Mais lorsque j'appelle cette commande par :

\begin{exemple}{\textwidth}
Texte à encadrer.
\end{exemple}

Le texte est bien encadré mais la largeur semble mal définie. Le
texte est bien aligné à gauche. Mais le cadre et le texte du cadre
dépassent à droite de quelques millimètres par rapport à la largeur
des paragraphes.

Dois-je modifier la fonction ou passer un paramètre plus adapté?

Merci,

JV
Jean-Côme Charpentier
2006-05-26 16:09:20 UTC
Permalink
Post by Julien V
Bonjour,
Je souhaite encadrer un texte. Pour cela, j'utilise l'exemple de la FAQ
\newsavebox{\fmbox}
\newenvironment{exemple}[1]
{\noindent\begin{lrbox}{\fmbox}\begin{minipage}{#1}}
{\end{minipage}\end{lrbox}\fbox{\usebox{\fmbox}}\indent}
\begin{exemple}{\textwidth}
Texte à encadrer.
\end{exemple}
Le texte est bien encadré mais la largeur semble mal définie. Le
texte est bien aligné à gauche. Mais le cadre et le texte du cadre
dépassent à droite de quelques millimètres par rapport à la largeur
des paragraphes.
Dois-je modifier la fonction ou passer un paramètre plus adapté?
\par\noindent\begin{exemple} ...

Jean-Côme Charpentier
--
Pour la psycho, j'ai renoncé à en faire sur l'humain (en particulier
sur la gente féminine).
-+- JKr in fr.comp.text.tex -+-
Julien V
2006-05-26 16:25:34 UTC
Permalink
Merci de votre réponse. Mais cela ne corrige pas l"écart"...

J'ai une "parade" actuellement (pas élégante mais qui fonctionne).
Elle consiste à appeler la fonction comme ceci :

\begin{exemple}{.98\textwidth}

Le cadre ne dépasse plus. Mais je suppose que le problème ne vient
pas de là initialement.
Jean-Côme Charpentier
2006-05-26 19:04:25 UTC
Permalink
Post by Julien V
Merci de votre réponse. Mais cela ne corrige pas l"écart"...
J'ai une "parade" actuellement (pas élégante mais qui fonctionne).
\begin{exemple}{.98\textwidth}
Ce n'est effectivement pas l'élégance même. Cela ressemble plus à une
rustine pour empêcher LaTeX de gueuler qu'une résolution effective du
problème :-)
Post by Julien V
Le cadre ne dépasse plus. Mais je suppose que le problème ne vient
pas de là initialement.
Non, il vient d'espaces parasites. Je reprends tout le code :

\newsavebox{\fmbox}
\newenvironment{exemple}[1]
% {\noindent\begin{lrbox}{\fmbox}\begin{minipage}{#1}}
{\par\noindent
\begin{lrbox}{\fmbox}% sans doute pas obligatoire mais bon
\begin{minipage}{#1}
}
% {\end{minipage}\end{lrbox}\fbox{\usebox{\fmbox}}\indent}
% pourquoi \indent ?
{\end{minipage}%
\end{lrbox}%
\fbox{\usebox{\fmbox}}%
% le \aftergroup\ignorespaces permet de bouffer l'espace
% après le \end{exemple}. On peut aussi décréter que ce
% sera \par. Cela dépend de ce qui est souhaité
\aftergroup\ignorespaces
}

et cela doit fonctionner avec

%\begin{exemple}{\textwidth}
\begin{exemple}{\linewidth} % un peu mieux mais là n'était
% sans doute pas le problème
Texte à encadrer.
\end{exemple}

Jean-Côme Charpentier
--
tu dois essayer de trouver un pdf nomé 16-girou.pdf qui est à pstricks
ce que Beethoven est au piano.
-+- moky in fr.comp.text.tex -+-
Julien V
2006-05-26 19:59:01 UTC
Permalink
Post by Jean-Côme Charpentier
Ce n'est effectivement pas l'élégance même. Cela ressemble plus à une
rustine pour empêcher LaTeX de gueuler qu'une résolution effective du
problème :-)
Je m'en doutais... ;-)
Post by Jean-Côme Charpentier
% pourquoi \indent ?
Le \indent était pour rétablir l'indentation enlevée par
\noindent...

J'ai copié-collé votre solution telle quelle, cela ne résout pas le
problème. L'écart subsiste.

Le problème est peut-être ailleurs?
Jean-Côme Charpentier
2006-05-26 20:57:51 UTC
Permalink
Post by Julien V
J'ai copié-collé votre solution telle quelle, cela ne résout pas le
problème. L'écart subsiste.
Le problème est peut-être ailleurs?
Oui et je suis un imbécile. La prochaine fois, je testerai avant
d'envoyer !
Le problème, c'est que la minipage a une largeur de \linewidth mais
qu'elle est elle-même placée dans un \fbox et c'est le \fbox qui va
finalement provoquer le débordement.
Il faut composer la minipage avec la largeur indiquée moins deux fois
la largeur des filets moins deux fois l'espacement entre les filets et
le matériel encadré.
Voilà. On arrive à un vrai ECM pas tout à fait M mais on ne va pas
chipoter et, surtout, testé... et qui marche :-)

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[a4paper]{geometry}
\usepackage{lmodern}
\usepackage{calc} % écriture plus facile
\usepackage[frenchb]{babel}

\newsavebox{\fmbox}
\newlength{\largeur}
\newenvironment{exemple}[1]
{%
\setlength{\largeur}{#1-2\fboxsep-2\fboxrule}
\par\noindent
\begin{lrbox}{\fmbox}% sans doute pas obligatoire mais bon
\begin{minipage}{\largeur}
}
{
\end{minipage}%
\end{lrbox}%
\fbox{\usebox{\fmbox}}%
\aftergroup\ignorespaces
}

\begin{document}
\begin{exemple}{\linewidth}
Texte à encadrer.
\end{exemple}

\smallskip
\noindent\hrulefill{} pour vérifier \hrulefill
\end{document}

Jean-Côme Charpentier
--
Allons enfants de LaTeXrie-ieu
Le jour de gloire eeeeeest arrrrrivé
etc.
-+- Joss in fr.comp.text.tex -+-
Julien V
2006-05-26 21:20:44 UTC
Permalink
On se rapproche mais à présent, j'ai un autre problème.

Le texte est bien cadré et le cadre est aligné correctement.
Maintenant, le problème est au niveau de la marge du texte. Le texte
est trop proche du cadre de tout les côté (haut, droite, gauche et
bas) que le cadre le superpose.
Post by Jean-Côme Charpentier
\smallskip
\noindent\hrulefill{} pour vérifier \hrulefill
A quoi servent ces commandes?
Jean-Côme Charpentier
2006-05-26 21:35:46 UTC
Permalink
Post by Julien V
On se rapproche mais à présent, j'ai un autre problème.
Le texte est bien cadré et le cadre est aligné correctement.
Maintenant, le problème est au niveau de la marge du texte. Le texte
est trop proche du cadre de tout les côté (haut, droite, gauche et
bas) que le cadre le superpose.
Le superpose ?

La distance entre le cadre et le matériel inclus est déterminé par la
longueur \fboxsep. Donc un \setlength{\fboxsep}{12pt} (par exemple)
permet d'adapter ce que l'on veut
Post by Julien V
Post by Jean-Côme Charpentier
\smallskip
\noindent\hrulefill{} pour vérifier \hrulefill
A quoi servent ces commandes?
Ben à vérifier (c'était écrit :-) ). Plus précisément, à verifier,
grâce au \hrulefill, que le cadre s'étendait bien pile-poil de la marge
gauche jusqu'à la marge droite : c'est le cadre qui fait \linewidth de
large.

Jean-Côme Charpentier
--
Franchement je n'échangerais pas deux barils de macros C++ contre un
baril de macros en TeX (note que je révise instantanément ma position
si les macros sont en Perl).
-+- JKr in fr.comp.text.tex -+-
Julien V
2006-05-27 10:17:46 UTC
Permalink
Post by Jean-Côme Charpentier
Le superpose ?
Je me suis mal exprimé. Le texte colle au cadre. Il n'y a pas d'espace
entre l'extrémité des lettres du texte et le bord du cadre et ceci
quelque soit l'orientation (haut, bas, gauche et droite).

Lorsque je modifie \setlength{\fboxrule}{48pt}, je vois la différence.
Plus j'augmente la valeur, plus le texte sort du cadre.

Par contre, lorsque le modifie \setlength{\fboxsep}{48pt}, je ne vois
rien de changé.

J'ai l'impression que le problème se situe au niveau des repères du
texte encadré. Celui-ci se place comme s'il n'était pas encadré et
c'est pourquoi cela "colle" aux cadres qui eux sont biens placés.

Et je remarque un problème que je n'avais pas remarqué auparavant
(affiché sur la page précédente), j'ai un "-2" qui s'affiche juste
avant l'appel :

\begin{exemple}{\linewidth}
Texte à encadrer.
\end{exemple}
Jean-Côme Charpentier
2006-05-27 11:35:40 UTC
Permalink
Post by Julien V
Post by Jean-Côme Charpentier
Le superpose ?
Je me suis mal exprimé. Le texte colle au cadre. Il n'y a pas d'espace
entre l'extrémité des lettres du texte et le bord du cadre et ceci
quelque soit l'orientation (haut, bas, gauche et droite).
Lorsque je modifie \setlength{\fboxrule}{48pt}, je vois la différence.
Plus j'augmente la valeur, plus le texte sort du cadre.
Par contre, lorsque le modifie \setlength{\fboxsep}{48pt}, je ne vois
rien de changé.
C'est quoi ce bazar ?
Post by Julien V
J'ai l'impression que le problème se situe au niveau des repères du
texte encadré. Celui-ci se place comme s'il n'était pas encadré et
c'est pourquoi cela "colle" aux cadres qui eux sont biens placés.
Et je remarque un problème que je n'avais pas remarqué auparavant
(affiché sur la page précédente), j'ai un "-2" qui s'affiche juste
??? Vous avez des erreurs à la compilation ? Vous avez appelé
l'extension calc ? Bref, vous vous servez bien du code que j'ai proposé
quatre messages plus haut ?

I want an MCE (ECM pour les français, vous savez ce que cela veut
dire maintenant :-) ). Si possible un ECM avec le code que je propose. À
froid, comme ça, à l'aveugle, je n'y crois pas une seule seconde....
j'ai une tendance Saint Thomas (pas le TvO, l'autre).

Jean-Côme Charpentier
--
Alors comme ça on aime jouer avec des piles de boites ? Rhooooo
-+- Eddie in fr.comp.text.tex -+-
Julien Vandercammen
2006-05-27 11:58:15 UTC
Permalink
Post by Jean-Côme Charpentier
Post by Julien V
Post by Jean-Côme Charpentier
Le superpose ?
Je me suis mal exprimé. Le texte colle au cadre. Il n'y a pas d'espace
entre l'extrémité des lettres du texte et le bord du cadre et ceci
quelque soit l'orientation (haut, bas, gauche et droite).
Lorsque je modifie \setlength{\fboxrule}{48pt}, je vois la différence.
Plus j'augmente la valeur, plus le texte sort du cadre.
Par contre, lorsque le modifie \setlength{\fboxsep}{48pt}, je ne vois
rien de changé.
C'est quoi ce bazar ?
Je confirme. Je comprends pas non plus. Cela devrait être simple selon
la FAQ.
Post by Jean-Côme Charpentier
Post by Julien V
J'ai l'impression que le problème se situe au niveau des repères du
texte encadré. Celui-ci se place comme s'il n'était pas encadré et
c'est pourquoi cela "colle" aux cadres qui eux sont biens placés.
Et je remarque un problème que je n'avais pas remarqué auparavant
(affiché sur la page précédente), j'ai un "-2" qui s'affiche juste
??? Vous avez des erreurs à la compilation ? Vous avez appelé
l'extension calc ? Bref, vous vous servez bien du code que j'ai proposé
quatre messages plus haut ?
Je n'ai aucune erreur de compilation. Et je me sers bien de votre code.
Post by Jean-Côme Charpentier
I want an MCE (ECM pour les français, vous savez ce que cela veut dire
maintenant :-) ). Si possible un ECM avec le code que je propose. À
froid, comme ça, à l'aveugle, je n'y crois pas une seule seconde....
j'ai une tendance Saint Thomas (pas le TvO, l'autre).
Jean-Côme Charpentier
Voici l'ECM (;-)) :

\documentclass[a4paper,11pt,french,oneside]{book}
\usepackage{a4wide}
\usepackage[T1]{fontenc}
\usepackage{babel,indentfirst}
\usepackage[french]{minitoc}
\usepackage{latexsym,amsmath,amssymb}
\usepackage{array}
\usepackage{fancyhdr}
\usepackage{fancybox}
\usepackage{longtable}
\usepackage{makeidx}
\usepackage{xspace}
\usepackage{url}
\usepackage{lscape}
\usepackage{floatflt}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{lastpage}
\usepackage[center,small]{subfigure}
\usepackage[isolatin]{inputenc}
\usepackage{verbatim}
\usepackage{moreverb}
\usepackage[pdftex]{graphicx}
\usepackage{hyperref}

\setlength{\parskip}{5pt}

\setlength{\fboxsep}{12pt}

\newsavebox{\fmbox}
\newlength{\largeur}
\newenvironment{exemple}[1]
{%
\setlength{\largeur}{#1-2\fboxsep-2\fboxrule}
\par\noindent
\begin{lrbox}{\fmbox}
\begin{minipage}{\largeur}
}
{
\end{minipage}%
\end{lrbox}%
\fbox{\usebox{\fmbox}}%
\aftergroup\ignorespaces
}

\begin{document}

\begin{exemple}{\linewidth}

Blabla

\begin{itemize}
\item Blabla.
\end{itemize}

\end{exemple}

\end{document}

Il me donne le même problème que décrit précédemment.

Merci.
drax
2006-05-27 12:26:54 UTC
Permalink
Manque le package calc non ?
Post by Julien Vandercammen
\documentclass[a4paper,11pt,french,oneside]{book}
\usepackage{a4wide}
\usepackage[T1]{fontenc}
\usepackage{babel,indentfirst}
\usepackage[french]{minitoc}
\usepackage{latexsym,amsmath,amssymb}
\usepackage{array}
\usepackage{fancyhdr}
\usepackage{fancybox}
\usepackage{longtable}
\usepackage{makeidx}
\usepackage{xspace}
\usepackage{url}
\usepackage{lscape}
\usepackage{floatflt}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{lastpage}
\usepackage[center,small]{subfigure}
\usepackage[isolatin]{inputenc}
\usepackage{verbatim}
\usepackage{moreverb}
\usepackage[pdftex]{graphicx}
\usepackage{hyperref}
\setlength{\parskip}{5pt}
\setlength{\fboxsep}{12pt}
\newsavebox{\fmbox}
\newlength{\largeur}
\newenvironment{exemple}[1]
{%
\setlength{\largeur}{#1-2\fboxsep-2\fboxrule}
\par\noindent
\begin{lrbox}{\fmbox}
\begin{minipage}{\largeur}
}
{
\end{minipage}%
\end{lrbox}%
\fbox{\usebox{\fmbox}}%
\aftergroup\ignorespaces
}
\begin{document}
\begin{exemple}{\linewidth}
Blabla
\begin{itemize}
\item Blabla.
\end{itemize}
\end{exemple}
\end{document}
Il me donne le même problème que décrit précédemment.
Merci.
Juien V
2006-05-27 12:49:25 UTC
Permalink
Post by drax
Manque le package calc non ?
Oui ! C'est la solution.

Merci à tous pour votre aide.
s***@gmail.com
2006-05-28 16:50:23 UTC
Permalink
Bonjour ,
j'ai eu à l'instant un probleme similaire ou mon texte verbatim
encadré etait decalé de qq milimetre a droite et j'ai résolu le
probleme en utilisant le package "\usepackage{fancyvrb}" et mettant le
texte a encadré ainsi:

\begin{Verbatim}[frame=single,fontsize==\scriptsize]
texte a encadrer
\end{Verbatim}

j'ai trouvé ceci sur wikipedia à l'adresse:
http://fr.wikibooks.org/wiki/Programmation_LaTeX_Mise_en_forme_du_texte#Environnement_verbatim


Voila si ça peut aidé qqun un jour... qui sait?

Josselin Noirel
2006-05-27 09:06:05 UTC
Permalink
Jean-Côme Charpentier
Post by Jean-Côme Charpentier
% le \aftergroup\ignorespaces permet de bouffer l'espace
% après le \end{exemple}. On peut aussi décréter que ce
% sera \par. Cela dépend de ce qui est souhaité
\aftergroup\ignorespaces
En LaTeX, \ignorespacesafterend. Question, c'est pas simplement parce
que il faut retrancher \fbox(sep/rule) que ça déborde ?
--
Joss, qui n'a pas encore fini le fil
Continuer la lecture sur narkive:
Loading...