Envoyer les figures et tableaux en fin de document

Certains journaux demandent à ce que le corps de document soit séparé des figures et des tableaux. Je vous donne ici quelques astuces pour automatiser l’envoi automatique des figures en fin de documents.

Je ne me prononcerai pas sur le bien-fondé de ce choix éditorial, même si franchement, je vois franchement pas l’intérêt d’une telle contrainte (ni pour l’auteur ni pour les reviewers), mais les voies de l’édition scientifique sont impénétrables.

Du coup, je vais plutôt me contenter de vous donner une solution (presque) clef en main.

Package enfloat

Le plus simple pour ce faire est d’utiliser le bien nommé package endfloat. Une fois chargé, celui-ci se charge d’envoyer en fin de document toutes les figures (environnements figure et figure*) et tableaux (environnement table et table*). A l’emplacement théorique du flottant un question, enfloat insère alors un texte de remplacement du style :

[Figure 1 about here.]

Précautions quant à la syntaxe

Le package se contente en fait de parser le code source à la recherche des balises de début et de fin d’environnement, avant de balancer le tout en fin de document. Ce parser est très rudimentaire car il n’utilise pas d’expression régulière mais bien des chaînes de caractères. Si vous ne pannez rien à la phrase précédente, je la reformule plus simplement : faites bien attention dans votre code, sinon ça fait nimp’ !

Pour un tableau par exemple, il faut en effet que la syntaxe soit la suivante :

blabla
\begin{table}
  % Mon tableau
\end{table}
blabla

Il faut donc que votre code ait exactement la structure suivante :

  • texte
  • retour à la ligne
  • \begin{table}
  • contenu de l’environnement
  • \end{table}
  • retour à la ligne

L’erreur est d’avoir des espaces après le \begin{table} ou le \end{table}. En effet, un simple espace en trop et le parser rate la ligne en question, au risque soit d’envoyer la moitié du texte en fin de document, soit de lamentablement crasher en retournant l’erreur suivante :

(./texput.aux) (texput.ttt))
Runaway argument?
! File ended while scanning use of \efloat@xfloat.

Prise en charge des autres environnements

Par défaut, seuls les environnements figure, table et leurs pendants étoilés sont pris en charge par endfloat. Si vous souhaitez ajouter d’autres types de flottants, par exemple sidewaytable :

\DeclareDelayedFloatFlavor{sidewaystable}{table}

Problème de numérotation des figures à cause des annexes

Si vous avez des annexes (dans un environnement appendix par exemple) et que la numérotation des figures change dans les annexes (par exemple si vous passez d’une numérotation numérique à une alphabétique), alors toutes vos figures seront numérotées comme des annexes, vu qu’elle sont en fin de document ! Les références croisées seront correctes, certes, mais très bizarres. Mais surtout, le texte de remplacement restera inchangé, donc incohérent avec les numéros de légende !

Pour pallier ce problème, le plus simple est d’enregistrer le format de numérotation des flottants avant d’entamer les annexes, puis de le rétablir avant la fin du document, là où sont censés échoir lesdits flottants. Exemple pour les figures :

\let\thefigureBack\thefigure
  \begin{appendix}
    % Mes annexes
  \end{appendix}
\let\thefigure\thefigureBack
\end{document}

Pour aller plus loin

Le package dispose de moult d’options de personnalisation, que je vous invite naturellement à découvrir dans la documentation officielle. J’en profite aussi pour rappeler qu’il est possible de définir de nouveau types de flottants.