Encadré à cheval sur deux pages

102 views
Skip to first unread message

Astier

unread,
Apr 23, 2008, 10:29:28 AM4/23/08
to
Bonjour,


J'aurais souhaité créer un petit encadré et l'idéal serait qu'il
puisse être à cheval sur plusieurs pages. Cela exclut donc le package
boxedminipage ; après avoir essayé le package framed je suis déjà un
peu plus satisfait mais c'est pas génial dans la mesure où le cadre
n'est pas continu : il se ferme en bas de première page : serait-il
possible que cette ligne horizontale en bas de première page et celle
en haut de seconde page n'apparaissent pas ?

De plus, j'ai placé une note de bas de page dans cet encadré et elle
n'est pas prise en compte ; bien sûr, l'idéal serait d'avoir le même
résultat que lorsque l'on utilise une minipage, à savoir la note en
pied d'encadré. Je suppose qu'il suffit pour obtenir ce comportement
d'ajouter en bas de cadre les instructions suivantes :

\footnoterule
\footnotetext[]{.....}

Le problème c'est que dans ce cas-là il n'est pas possible de mettre
une lettre comme argument à \footnotemark et \footnotetext ce que
produit le \footnote dans un environnement minipage.

Merci pour toute idée.

A bientôt.

bernard...@math.u-psud.fr

unread,
Apr 23, 2008, 12:30:29 PM4/23/08
to

Voyez du côté de l'extension framed (dans latexmisc), qui sert
justement à cela, et a été utilisée pour définir des environnements
framedtheorem dans l'extension ntheorem. (v. 1.25).

B.A.

Astier

unread,
Apr 23, 2008, 2:13:37 PM4/23/08
to
>
> Voyez du côté de l'extension framed (dans latexmisc), qui sert
> justement à cela, et a été utilisée pour définir des environnements
> framedtheorem dans l'extension ntheorem. (v. 1.25).
>

Alors je viens de regarder cela : ntheorem est bien installé (texlive-
latex-extra) ; j'ai ajouté dans mon en-tête en suivant la doc

\usepackage[framed]{ntheorem}

mais je dois avouer que je vois mal comment gérer tout cela :/ En
effet, si j'ai bien compris il faut définir un environnement soi-
même ? L'environnement framedtheorem n'est pas reconnu. J'ai essayé de
définir \newframedtheorem mais sans que cela donne quoi que ce soit.

De plus, je ne compte aucunement y mettre un théorème mais seulement
du texte, donc sans compteur,... Est-ce que cela est possible avec
ntheorem ?

Merci encore.

bernard...@math.u-psud.fr

unread,
Apr 23, 2008, 3:28:37 PM4/23/08
to

Je ne donnais l'exemple de ntheorem que pour montrer l'usage
documenté que l'on pouvait faire de l'extension framed. C'est elle
qu'il faut utiliser, à l'aide de l'environnement framed, qui peut être
personnalisé : le « cadre » peut très bien être un fond de couleur, p.
ex. ; on emploie alors l'environnement \MakeFramed et la commande
\FrameCommand. Vous trouverez les détails au début du fichier
framed.sty.

B.A.

Astier

unread,
Apr 23, 2008, 6:37:48 PM4/23/08
to
Alors j'ai regardé en effet et ai opté pour un environnement leftbar.
Par contre est-ce possible d'augmenter la marge gauche localement au
niveau de cet environnement seulement si l'on a spécifié auparavant
dans son préambule les marges avec le package geometry ?

Je dois avouer que j'ai beaucoup de mal à comprendre le fonctionnement
de \MakeFramed \endMakeFramed etc et surtout les options qui leur sont
applicables. Pourriez-vous me communiquer un exemple minimal afin que
ce soit plus clair s'il vous plaît ?

A bientôt.

bernard...@math.u-psud.fr

unread,
Apr 23, 2008, 7:13:58 PM4/23/08
to

Je ne me suis jamais servi directement de framed, mais seulement par
l'intermédiaire de ntheorem. J'essaierai de regarder, mais je ne
garantis pas que j'y comprendrai beaucoup plus.

À première vue, vous devez définir un nouvel environnement qui définit
à l'entrée la façon d'encadrer (au sens large), via une \FramedCommand
et tout de suit après rentre dans l'environnement Framed ; à la
sortie, se contente de sortir de cet environnement. Par exemple, pour
avoir un encadrement ombré, j'écrirais :
\newenvironment{moncadreombre}%
{\def\FrameCommand{\shadowbox}\begin{MakeFramed}}%
{\end{MakeFramed}%

Ceci étant, si vous voulez en plus agrandir la marge gauche, vous avez
peut-être intérêt, pour le coup, à utiliser ntheorem, qui prévoit une
longueur \theoremindent, justement. Il suffit de demander, dans un
fichier ntheorem.cfg, qu'il n'y ait ni étiquette ni numéro pour ce
type de « théorème ».

B.A.

Pétiard François

unread,
Apr 24, 2008, 3:06:36 AM4/24/08
to

\documentclass[12pt,a4paper]{article}
\usepackage[margin=2cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[francais]{babel}
\usepackage{framed}
\usepackage{lipsum}
\begin{document}
\lipsum[1-2]

\newenvironment{barregauche}{%
\def\FrameCommand{\kern3cm\vrule width 3pt \hspace{10pt}}%
\MakeFramed {\advance\hsize-\width \FrameRestore}}%
{\endMakeFramed}
\begin{barregauche}
\lipsum
\end{barregauche}

\lipsum

\end{document}

François

Astier

unread,
Apr 24, 2008, 3:54:42 AM4/24/08
to
On 24 avr, 09:06, Pétiard François

Merci pour cet exemple qui correspond parfaitement à ce que je
souhaitais réaliser. Par contre j'aimerais comprendre un peu plus ce
qui est fait :
- \FrameCommand --> délimite la zone du texte ?
- \kern3cm --> augmente la marge gauche
- \vrule --> barre verticale de largeur x
- \hspace{x} --> espace entre barre et texte
Après ça se gâte :/
Qu'en est-il pour diminuer la marge droite par exemple ?

Si l'on préfère avoir un cadre plutôt qu'une barre à gauche, je ne
vois pas trop ce qu'il faut définir ou plutôt ce qu'il faut conserver
de la définition de \MakeFramed présente dans framed.sty.

Merci encore pour votre aide et vos éclaircissements.


Jean-Côme Charpentier

unread,
Apr 24, 2008, 6:24:51 AM4/24/08
to
Astier a écrit :

> On 24 avr, 09:06, Pétiard François
> <petiard.point.francois@_at_free.point.fr> wrote:
>> Le 24/04/2008 00:37, Astier a écrit :
>> [...]
>> \usepackage{framed}
>> [...]

>> \newenvironment{barregauche}{%
>> \def\FrameCommand{\kern3cm\vrule width 3pt \hspace{10pt}}%
>> \MakeFramed {\advance\hsize-\width \FrameRestore}}%
>> {\endMakeFramed}
> [...]

> Merci pour cet exemple qui correspond parfaitement à ce que je
> souhaitais réaliser. Par contre j'aimerais comprendre un peu plus ce
> qui est fait :

C'est du Plain TeX. On pourrait sans doute faire la même chose avec du
LaTeX. Cela commencerait par un \renewcommand\FrameCommand{... En fait,
cette définition est à quelques epsilon près le code de l'environnement
leftbar présent dans l'extension. Je trouve d'ailleurs que l'auteur
aurait pu paramétrer un peu plus cet environnement au lieu d'écrire le
décalage horizontal et l'épaisseur du filet en dur dans le code. Bref.

> - \FrameCommand --> délimite la zone du texte ?

Non. Indique ce qu'il faut effectuer pour l'encadrement.

> - \kern3cm --> augmente la marge gauche

On va être plus précis : Indique un blanc de 3cm. Si on a de la chance
et qu'on se trouve en mode horizontal, ce sera bien un blanc horizontal.
Ici, visiblement, on est bien en mode horizontal donc c'est strictement
équivalent à \hspace*{3cm}%

> - \vrule --> barre verticale de largeur x

Là aussi, on va être précis. \vrule, c'est une boîte de réglure qu'on
peut utiliser lorsqu'on est en mode horizontal. C'est à priori fait pour
faire des barres verticales mais il n'y a rien d'obligatoire.
Contrairement à la commande \rule de LaTeX, la primitive \vrule, si on
ne lui donne pas d'indication de hauteur va s'adapter à la hauteur de la
ligne courante. Je suppose qu'en interne, framed construit des sortes de
grosse boîtes pour contenir tout le texte... d'où la barre verticale
aussi haute que le texte.

> - \hspace{x} --> espace entre barre et texte

Vi.

> Après ça se gâte :/
> Qu'en est-il pour diminuer la marge droite par exemple ?

En fait, pour TeX, la notion de marge droite n'existe pas. La marge
droite, c'est l'espace entre l'endroit où on arrête d'écrire et le bord
physique du papier... et TeX se fout du papier sur lequel on écrit.
En d'autres termes, il suffit d'écrire moins large et cela augmentera
la marge droite. Comme framed utilise \hsize, c'est sur cette primitive
TeX que l'on agira. En écrivant tout ce que j'ai pu en syntaxe LaTeX,
cela donne maintenant :

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[a4paper]{geometry}
\usepackage{lmodern}
\usepackage{framed}
\usepackage{lipsum}
\usepackage[frenchb]{babel}

\newenvironment{barregauche}{%
% ajout pour une marge droite augmentée
\par
\addtolength{\hsize}{-2.5cm}%
% fin de l'ajout
\renewcommand\FrameCommand{%
\hspace*{3cm}%


\vrule width 3pt
\hspace{10pt}%

}%
\MakeFramed{%
\addtolength{\hsize}{-\width}%
\FrameRestore
}
}%
{\endMakeFramed}

\begin{document}
\lipsum[1-2]


\begin{barregauche}
\lipsum
\end{barregauche}

\lipsum
\end{document}

En plus c'est rigolo : avec le code ci-dessus, le texte est coupé sur
trois pages et la troisième page ne contient qu'une seule ligne (pas
terrible).

> Si l'on préfère avoir un cadre plutôt qu'une barre à gauche, je ne
> vois pas trop ce qu'il faut définir ou plutôt ce qu'il faut conserver
> de la définition de \MakeFramed présente dans framed.sty.

Dans l'environnement framed, on utilise la commande \FrameCommand par
défaut qui est
\fboxrule=\FrameRule \fboxsep=\FrameSep \fbox
En d'autres termes, sans rien changer, on peut modifier l'épaisseur des
traits avec un
\setlength{\FrameRule}{<dimension qu'on veut>}
et l'espace entre filet et texte avec un
\setlength{\FrameSep}{<dimension qu'on veut>}
Maintenant, si on veut utiliser un framed coloré (avec l'extension
xcolor), on peut s'amuser en redéfinissant la commande \FramedCommand
dans un environnement. Exemple :

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[a4paper]{geometry}
\usepackage{lmodern}
\usepackage{framed}
\usepackage{xcolor}
\usepackage{lipsum}
\usepackage[frenchb]{babel}

\newenvironment{colorframe}[2]{%
\renewcommand\FrameCommand{%
\fboxrule=10\FrameRule
\fboxsep=\FrameSep
\fcolorbox{#1}{#2}%
}%
\MakeFramed{%
\addtolength{\hsize}{-\width}%
\FrameRestore
}
}%
{\endMakeFramed}

\definecolor{rosepetard}{rgb}{1, 0.5, 0.5}

\begin{document}
\lipsum[1-2]
\begin{colorframe}{green}{rosepetard}
\lipsum
\end{colorframe}

\lipsum
\end{document}

> Merci encore pour votre aide et vos éclaircissements.

Pas de quoi. Je n'arrive qu'en fin de bataille.

Jean-Côme Charpentier

--
Aimant particulièrement le silex taillé (tendance paléolithique à
peine moyen), j'utilise de temps en temps des fontes bitmaps et je
n'ai strictement jamais de problème de pixellisation. Le problème,
c'est que comme je n'ai pas de problème, je finis par l'oublier (ce
problème).
-+- Jean-Côme in fr.comp.text.tex -+-

Pétiard François

unread,
Apr 24, 2008, 6:32:20 AM4/24/08
to

Non, je pense plutôt les paramètres et les commandes de "mise en boîte"

> - \kern3cm --> augmente la marge gauche
> - \vrule --> barre verticale de largeur x
> - \hspace{x} --> espace entre barre et texte
> Après ça se gâte :/
> Qu'en est-il pour diminuer la marge droite par exemple ?

\documentclass[12pt,a4paper]{article}
\usepackage[margin=2cm]{geometry}
\usepackage{livre3}


\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[francais]{babel}
\usepackage{framed}
\usepackage{lipsum}
\begin{document}
\lipsum[1-2]

\newenvironment{barregauche}{%
\def\FrameCommand{\vrule width 3pt \hspace{10pt}}%
\MakeFramed{\advance\hsize-\width\FrameRestore\advance\hsize-6cm}}%


{\endMakeFramed}
\begin{barregauche}
\lipsum
\end{barregauche}

\lipsum

\end{document}

> Si l'on préfère avoir un cadre plutôt qu'une barre à gauche, je ne


> vois pas trop ce qu'il faut définir ou plutôt ce qu'il faut conserver
> de la définition de \MakeFramed présente dans framed.sty.

\documentclass[12pt,a4paper]{article}
\usepackage[margin=2cm]{geometry}
\usepackage{livre3}


\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[francais]{babel}
\usepackage{framed}
\usepackage{lipsum}
\begin{document}
\lipsum[1-2]

\newenvironment{barregauchecadre}{%
\MakeFramed{\advance\hsize-\width\FrameRestore\advance\hsize-6cm}}%
{\endMakeFramed}
\begin{barregauchecadre}
\lipsum
\end{barregauchecadre}

\lipsum

\end{document}


François

Astier

unread,
Apr 24, 2008, 6:57:53 AM4/24/08
to
On 24 avr, 12:32, Pétiard François

Merci pour tous ces éclaircissements et exemples commentés, ça me fait
penser que je pense profiter de mes prochaines vacances pour me
plonger dans la littérature LaTeXienne pour mieux saisir tout un tas
de choses :)

Sinon, je suis maintenant parfaitement satisfait du résultat et des
explications mais j'en reviens à mon premier messages : si l'on passe
par un encadrement sur plusieurs pages, on a droit à chaque bas de
page à une bordure horizontale ce qui est à mon avis (goût ?) pas
terrible au niveau de la continuité du propos. C'est mon avis (goût ?)
qui est erroné ou pas ?
Enfin ce n'est qu'un détail insignifiant.

Merci encore, à bientôt.

bernard...@math.u-psud.fr

unread,
Apr 24, 2008, 2:37:21 PM4/24/08
to

Je seraia plutôt d'accord avec vous. Il semble en fait que la grosse
\fbox soit scindée en plusieurs au lieu d'être interrompue
verticalement (excuses pour ce charabia, mais j'espère être compris).
Il y a peut-être des pistes sur ce fil de matthematex.net, où un
problème analogue avait été posé (et résolu, il me semble) :
http://forum.mathematex.net/latex-f6/encadrement-speciaux-t5819.html

B.A.

Astier

unread,
Apr 25, 2008, 2:38:52 AM4/25/08
to

C'est bon, c'est pas tant du charabia que ça :) J'ai saisi l'idée.
Merci pour le lien je vais lire ça et faire des essais.


A bientôt.

Reply all
Reply to author
Forward
0 new messages