Dans mon précédent billet, je vous expliquais comment définir de nouveaux environnements et leur associer une numérotation propre. Aujourd’hui nous allons aller plus loin encore en définissant un nouveau type d’objets flottants.
Rappelons que le principe des flottants est de laisser à $latex \LaTeX$ la responsabilité de placer au mieux les flottants, de façon à assurer la lecture la plus continue possible du texte. Les flottants ayant ainsi une position variable dans le texte, il est de bon aloi d’y faire référence dans le texte, sans quoi le lecteur passera à côté sans prêter attention audits flottants, d’où la nécessité de la numérotation.
Mettons que nous voulions définir des encadrés flottants dans notre document.
Table des matières
Première méthode : en définissant son propre compteur
Dans un premier temps, commençons par charger le package newfloat
, afin de définir ce nouveau type de flottant :
\usepackage{newfloat} \DeclareFloatingEnvironment{encadreFlot} |
On dispose ainsi de l’environnement flottant encadreFlot
. Reste à lui attribuer un contenu, avec notamment la valeur de son compteur (encadre
) :
\usepackage{framed} \newcounter{encadre} \newenvironment{encadre}[1][htbp]{ \refstepcounter{encadre} \begin{encadreFlot}[#1] \begin{framed} \textsc{Encadré} \theencadre\\ }{ \end{framed} \end{encadreFlot} } |
On dispose maintenant de l’environnement encadre
, qui permet d’afficher un cadre numéroté :
\usepackage{lipsum} \begin{document} \begin{encadre} \lipsum[1] \end{encadre} \end{document} |
Vous noterez que lors de la définition de l’environnement encadre
, j’ai pris le soin de définir un argument optionnel (htbp
par défaut), ce qui nous permettra par la suite de choisir le placement souhaité. Exemple si l’on souhaite avoir l’encadré en bas de page :
\begin{encadre}[h] % Contenu de l'encadré \end{encadre} |
Cette méthode va présenter deux avantages : on pourra ainsi définir une légende différente pour chaque encadré, et on pourra même afficher une « liste des encadrés ».
De plus, ce package génère ses propres compteurs, donc plus besoin d’en définir de nouveaux. newfloat
et caption
sont conçus pour fonctionner ensemble, ce qui permet une grande robustesse du code mais complique un peu le paramétrage de chacun.
Définition du nouveau flottant
Pour assurer la compatibilité du newfloat
avec caption
, il nous faut définir certaines options à l’environnement flottant encadreFlot
:
\usepackage{newfloat} \DeclareFloatingEnvironment[name=Encadré,listname={Liste des encadrés}]{encadreFlot} |
Les options name
et listname
servent respectivement à définir le nom affiché pour chaque flottant et le titre à afficher lors du listage des flottants correspondants.
Afin d’assurer la cohérence entre le style choisi pour les titres des figures et tableaux et ceux des encadrés, on va demander à ce que ces derniers soient en petites majuscules :
\usepackage{caption} \captionsetup[encadreFlot]{labelfont=sc} |
Définition du nouvel environnement
Grâce au package caption
, la légende sera alors définie comme pour celles des figures et tables, c’est-à-dire grâce à la commande \caption{}
. La définition de notre environnement encadre
sera alors simplement :
\usepackage{framed} \newenvironment{encadre}[1][htbp]{ \begin{encadreFlot}[#1] \begin{framed} }{ \end{framed} \end{encadreFlot} } |
Comme je viens de le dire, on va donc utiliser \caption{}
dans l’environnement encadre
pour définir chaque légende :
\usepackage{lipsum} \begin{document} \begin{encadre} \caption{A propos du Lorem Ipsum} \lipsum[2] \end{encadre} \end{document} |
La commande \caption
peut ici aussi prendre un argument optionnel, qui correspond au titre court à afficher dans la « liste des encadrés » :
\usepackage{lipsum} \begin{document} \listofencadreFlots \medskip \lipsum[1] \begin{encadre} \caption[A propos du Lorem Ipsum]{Le Lorem Ipsum est constitué de plusieurs paragraphes, voici un exemple du second.} \lipsum[2] \end{encadre} \end{document} |
Bonus : un encadré un peu moins moche
Jusqu’alors, j’ai utilisé une solution simple pour dessiner les cadres noirs (package framed
). Si vous souhaitez quelque-chose à l’allure moins militaire, pensez à TikZ !
Exemple :
\usepackage[framemethod=TikZ]{mdframed} \newenvironment{encadre}[1][htbp]{ \begin{encadreFlot}[#1] \begin{mdframed}[roundcorner=10pt,backgroundcolor=blue!10] }{ \end{mdframed} \end{encadreFlot} } |
Pour aller plus loin
Je ne donnerai que deux adresses : les documentations officielles de newfloat
et de caption
.
Bonne compilation !