Ajouter des notes en bas d’encadré

Dans un précédent article, je décrivais comment définir de nouveaux types de flottant en prenant pour exemple les encadrés. Pour ce faire, j’utilisais l’environnement framed qui souffre d’une lacune : il est nativement impossible d’y ajouter des notes en bas frame.

Suite à une question d’une fidèle lectrice mais néanmoins amie, je me suis penché sur cette restriction et surtout sur comment la contourner. Sur les différents fora, il est conseillé de placer le texte de la note en dehors du frame. Non seulement c’est moche, mais en plus c’est inefficace dans un flottant. J’ai donc décidé de recoder à ma sauce un système de notes en bas d’encadré.

Exemple

Code

Définition de l’environnement encadre

J’ai repris le code proposé dans mon billet à propos des flottants perso, que j’ai un peu pimpé comme suit :

\usepackage{framed}
\usepackage{newfloat}
\usepackage{caption}
\DeclareFloatingEnvironment[name=Encadré,listname={Liste des encadrés}]{encadreFlot}
\captionsetup[encadreFlot]{labelfont=sc}
 
\newcounter{tempfootnote}
\newenvironment{encadre}[1][htbp]{
    \begin{encadreFlot}[#1]
		\setcounter{tempfootnote}{\value{footnote}}
		\setcounter{footnote}{0}
		\renewcommand{\thefootnote}{\alph{footnote}}
      	\begin{framed}
  }{
		\ifcsname framednotetext\endcsname
			\vspace{0.5em}
			\footnoterule
			\footnotesize{
				\framednotemark. \framednotetext
				\ifcsname framednotetexts\endcsname
					\\\framednotemarks. \framednotetexts
				\fi
			}
		\fi	  
		\end{framed}
		\setcounter{footnote}{\value{tempfootnote}}
		\renewcommand{\thefootnote}{\arabic{footnote}}
    \end{encadreFlot}
  }
 
 
\newcommand{\framednote}[1]{
	\ifcsname framednotemark\endcsname
		\footnotemark\kern-1.5ex\def\framednotemarks{b}
		\def\framednotetexts{#1}		
	\else
		\footnotemark\kern-1.5ex\def\framednotemark{a}
		\def\framednotetext{#1}
	\fi
}

Utilisation

Rien de plus simple : dans un environnement encadre, il suffit d’utiliser la commande \framednote en lieu et place de l’habituel \footnote.

J’ai ici supposé que les encadrés étaient suffisamment courts pour qu’on ne soit pas tenté d’y mettre plus de deux notes par encadré. Si vous souhaitez étendre cette limite, je vous laisse vous inspirer librement de ce que je vous ai déjà mâché !

Exemple pour obtenir le rendu ci-dessus :

\begin{document}
Exemple de paragraphe au sein duquel on place l'environnement \texttt{encadre}~\ref{enc:premierenc}. On y ajoute aussi une note pour pouvoir la comparer avec celle de l'encadré\footnote{Première note dans le corps de texte.}.
	\begin{encadre}
		\caption{Titre de l'encadré}
		\label{enc:premierenc}
		Texte compris dans l'encadré, où l'on raconte une anecdote merveilleuse sur une personne extraordinaire\framednote{Fonctionne aussi avec les animaux.} mais sans pour autant faire perdre le fil au lecteur\framednote{Celui-ci pourra, au choix, lire très vite cet encadré voire ne pas le lire du tout.}.	
	\end{encadre}
 
	Le texte continue ici\footnote{Le lecteur avisé remarquera que les notes comprises dans l'encadré n'influent pas sur la numérotation dans le corps de texte.} avec d'autant plus de ferveur.
 
	\begin{encadre}
	On illustre ici le fait que le second encadré ne soit pas impacté par le premier\framednote{Les notes d'encadré fonctionnent toujours.}.
	\end{encadre}
\end{document}

 

Fonctionnement

Au début de chaque encadré, je sauvegarde la valeur du compteur des footnotes, je la réinitialise à 0 et change son style en roman. A la fin de l’encadré, je restaure le style et la valeur du compteur pour la suite du corps de texte.

A la fin de chaque encadré, je commence par regarder si un framednote a été défini. Si oui, je crée la zone des notes et y insère le texte défini lors du framednote. Si un framednote est déjà défini lors d’un appel, alors je crée une nouvelle note, dont le texte est placé en dessous du premier.