Définir de nouveaux types de flottants

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.

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}

Flottant
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}

Deuxième méthode : avec le package caption

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.

Paramétrage des captions

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}

CaptionLa 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}

ListeDesEncadres

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}
	}

Caption-Tikz

 Pour aller plus loin

Je ne donnerai que deux adresses : les documentations officielles de newfloat et de caption.

 

Bonne compilation !