Nouveaux flottants avec rotation

samedi 10 décembre 2011, mise à jour jeudi 5 décembre 2013, par Maïeul
Suivre la vie du site RSS 2.0 Forum

Les flottants désignent en LaTeX tout ce qui n’est pas du texte (images, tableau, graphisme etc.) et qui pose par conséquent des problèmes spécifiques de mise en page, pour éviter de « casser » le déroulement du texte.

La solution retenue par LaTeX pour gérer ces éléments se base sur un algorithme qui essaie d’installer l’objet au meilleur endroit possible, en fonction des indications fournies par l’utilisateur.

En outre, chaque flottant peut disposer d’une légende, et les flottants possèdent leurs propres numérotation.

Cet article ne cherche pas à présenter les flottants standards, d’autres l’ont fait avant moi, mais à montrer comment créer un nouveau type : « carte » et l’orienter dans le sens de la hauteur.

Le besoin

Dans mon mémoire, je souhaite intégrer une carte de l’Afrique Romaine. Je souhaiterais donc avoir un flottant « carte ». En outre, étant donné le format de la carte, il fallait que j’oriente mon flottant dans le sens de la hauteur de page, et non de la largeur, c’est à dire que ma légende soit basculée à la verticale.

Dans mon cas, j’avais pris une carte sur l’Encyclopædia Universalis, mais dans cet article, pour des raisons de précautions vis-à-vis des droits d’auteurs, je prend appui sur une carte de Wikimédia.

Créer un nouveau flottant

Par défaut, LaTeX propose deux types de flottant :

  • tableau, insérable avec \begin{table}  … \end{table}.
  • figure, insérable avec \begin{figure} … \end{figure}.

Je souhaitais donc en créer un nouveau, carte, insérable avec \begin{carte}…  \end{carte}. J’aurais certes pu choisir de détourner un des types standard, en modifiant la chaîne de langue, mais outre que cela n’était pas très satisfaisant du point de vue méthodique, j’avais aussi besoin de garder les types standards.

J’ai donc fait appel au package float pour en créer de nouveau. Dans ce package, je me sert de deux commandes :

  1. \newfloat qui permet de créer des nouveau flottants et qui prend les arguments suivants :
    1. type qui est le type du nouveau flottant à créer.
    2. placement qui indique le placement par défaut du flottant, en utilisant l’un des paramètres de positions disponibles.
    3. extension qui est l’extension du fichier externe dans lequel sera stocké la table de ce niveau type de flottant (par exemple, si j’avais souhaité avoir une table des cartes).
    4. paramètre facultatif : dans. On indique là un niveau de titre (chapter, section etc.) qui sert pour la numérotation des flottants. Par exemple, si on indique chapter, la numérotation sera de la forme « numéro de chapitre . numéro du flottant au sein du chapitre ». Dans mon cas, je n’avais pas besoin de cela.
  2. \floatname qui reçoit en premier argument le type du flottant et en second son nom, tel qu’il apparaît dans la légende.

Concrètement, dans mon cas, cela donne :

\usepackage{float}
\usepackage{graphicx}
\newfloat{carte}{h}{carte}
\floatname{carte}{Carte}

Avec cela, est créé un environnement carte, qui est un flottant. Je peux donc intégrer ma carte, en appelant au préalable le package graphicx qui permet d’inclure des fichier .jpg, .pdf ou .png. Je peux évidemment mettre une légende.

\begin{carte}
\includegraphics{afrique.png}
\caption{L'Afrique Romaine, extrait de xxx}
\end{carte}

Ce qui donne le résultat suivant :

1er essai d’un flottant de type « carte »
La carte dépasse en hauteur (pas de place pour la légende) et en largeur.

Rotation de la carte

Pour permettre d’avoir la carte en entier sans la réduire trop, il faudrait que je la tourne de 90°.

Je ne souhaite pas modifier le fichier originel ni utiliser la possibilité de tourner l’image offerte par graphicx [1]

En effet, je souhaite conserver la convention qui veut que le Nord soit situé en haut de la carte.

Il faut donc que la légende tourne « en même temps » que la carte.

Pour ce faire, je vais utiliser le package rotating qui permet d’avoir des flottants tourner. Pour chaque flottant xxx est créé un flottant sidewaysxxx permettant d’avoir une orientation dans le sens de la hauteur et non dans celui de la largeur.

Pour que cela puisse fonctionner avec les nouveaux flottants, il faut que ceux-ci soient déclarés après l’appel au package.

Ce qui donne donc dans le préambule :

\usepackage{float}
\usepackage{rotfloat}
\newfloat{carte}{!}{car}
\floatname{carte}{Carte}

Et dans le corps du document :

\begin{sidewayscarte}
\includegraphics{afrique.png}
\caption{L'Afrique Romaine, extrait de xxx}
\end{sidewayscarte}

On obtient alors :

Carte après rotation
Si la carte est bien orientée, elle est encore trop grande

Réduire automatiquement l’image

Mon image étant très large, elle dépasse. Je souhaite la réduire, de telle sorte que la largeur avant la rotation soit égale à la hauteur proposé au texte sur une page.

La hauteur proposé à un texte sur une page est défini par la longueur \textheight. Je peux passer une option lors de l’appel à la commande includgraphics pour réduire automatiquement la largeur :

\includegraphics[width=largeur souhaitée]{fichier}

Ainsi, mon appel au flottant se fait donc de la manière suivante :

\begin{sidewayscarte}
\includegraphics[width=\textheight]{afrique.png}
\caption{L'Afrique Romaine, extrait de xxx}
\end{sidewayscarte}

Et j’obtiens au final :

Carte finale
Bien orientée, bien légendée, à la bonne taille. Que demande le peuple ?

Notes

[1En mettant le code suivant : \includegraphics[angle=90]{afrique.png}.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Acheter XeLaTeX appliqué aux sciences humaines

À propos

Titulaire d’un doctorat en théologie et d’un doctorat en histoire, sous la direction conjointe de Frédéric Amsler et d’Élisabeth_Malamut, je commence à partir du 1er août 2017 un travail d’édition critique des Actes de Barnabé.

Dans le cadre de la rédaction de mon mémoire de master puis de ma thèse de doctorat, j’ai été emmené à utiliser LaTeX, et j’ai donc décider de partager mes techniques. En effet, au cours de mes premiers apprentissages, j’ai découvert que les ressources indiquant les outils pour l’utilisation de LaTeX en sciences humaines étaient rares. Ceci m’a conduit à maintenir ou créer plusieurs packages LaTeX et à donner plusieurs formations.

J’ai reçu en 2018 le prix DANTE e.V pour mon travail autour de LaTeX, en particulier autour de reledmac et reledpar.

Par ailleurs, je suis membre actif de la communauté SPIP, au sein de laquelle j’administre le site Spip-Contrib. Je propose sur ce site quelques notes sur SPIP, en général à destination de webmestre.

Il m’arrive également de faire un petit peu de Python, de temps en temps.

Enfin, je tiens un blog de réflexions politiques et religieuses.

Maïeul