Les références croisées avec LaTeX

Christophe Boulet

Cet article a pour but de vous montrer avec quelle facilité il est possible d'utiliser les références croisées avec LaTeX, ainsi que quelques extensions permettant d'en améliorer la présentation.

Commentez

- Titre : Les références croisées avec LaTeX

- Auteur : Christophe Boulet

- Parution : 16 juin 2014

- Mise à jour : 16 juin 2014

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2014 Winnt. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Les commandes de base

- III. Un exemple vaut mieux qu'un long discours

- IV. Améliorer la présentation des références croisées

- IV-A. L'extension varioref

- IV-B. L'extension hyperref

- IV-C. L'extension cleveref

- V. Faire référence à une référence grâce aux liens hypertext

- VI. Conclusion

- VII. Remerciements

I - Introduction

Il nous est tous arrivé à un moment ou un autre d'avoir besoin dans un document de faire référence à un tableau, une figure, une section…

Et c'est à ce moment que l'on se dit : « mais comment fait-on ça sous LaTeX ? ».

Rassurez-vous, ce n'est pas très compliqué. Il suffit de connaître quelques commandes et LaTeX s'occupera pour vous du reste… enfin presque.

II - Les commandes de base

Sans ajouter aucune extension, LaTeX offre par défaut plusieurs commandes qui couvrent les besoins de base et permettent de gérer des références croisées sans efforts.

La liste ci-dessous vous donnera ces commandes de base.

- \label{mot-clef} : c'est avec cette commande que l'on note un endroit auquel on pourra par la suite faire référence.

- \ref{mot-clef} : avec cette commande, on fait référence à la structure hiérarchique (section, sous-section…) dans laquelle se trouve notre mot-clef.

- \pageref{mot-clef} : avec cette commande, il est possible de faire référence à la page contenant notre mot-clef.

Il est préférable de coller au mot-clef la commande \label{mot clef} comme ci-dessous :

... une poule sur un mur\label{mur} ...

En procédant de cette façon, vous éviterez que le terme auquel vous voulez faire référence ne se trouve sur une autre page que la référence si celui-ci se situe proche d'un saut de page.

Il peut en effet être désagréable de voir une référence de ce type « comme indiqué section 1.1 page 3 » alors que celle-ci devrait être « comme indiqué section 1.1 page 2 »

ATTENTION !!! Compilez bien deux fois de suite afin que les références croisées soient parfaitement générées.

III - Un exemple vaut mieux qu'un long discours

Pour voir ce que permettent les commandes citées plus haut, nous allons utiliser le fichier de test ci-dessous.

Fichier test.tex

% packages utilisés
\documentclass[a4paper,12pt,french]{article}
\usepackage[top=2cm, bottom=1.5cm, left=1.5cm, right=1.5cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage[french]{babel}
\begin{document}
\section{ma première section}
\subsection{ma première sous-section}
\lipsum[1]\label{mareference}
\newpage
\section{ma seconde section}
Comme vu \ref{mareference} page \pageref{mareference}
\end{document}

Résultat de la double compilation

Comme le montre le résultat de la double compilation ci-dessus, la commande \ref{mareference} nous donne bien le numéro (ici 1.1) de la structure hiérarchique de notre document. Et la commande \pageref{mareference} affiche bien le numéro de page (ici 1) comme attendu.

L'ennui c'est que nous n'avons que des références à la page et à la structure du document. C'est certes pratique, mais dans certains cas, cela s'avère ne pas convenir à notre propos.

Il pourrait être plus pratique pour nous de donner le libellé de la section (ici « ma première sous-section ») par exemple ou de présenter sous la forme « page précédente » en lieu et place de « page 1 » lorsqu'il est fait référence à la page immédiatement précédente.

Pour ce faire, il existe plusieurs extensions que l'on peut trouver facilement sur le CTAN à l'adresse http://ctan.org/ctan-portal/search/.

La liste des extensions que je vais vous présenter ici n'est en rien exhaustive. Libre à vous d'en utiliser d'autres. Il ne s'agit que des extensions les plus fréquemment utilisées.

IV - Améliorer la présentation des références croisées

IV-A - L'extension varioref

Cette extension ajoute un certain nombre de commandes permettant un affichage intelligent des références.

Voici les principales (pour la liste exhaustive reportez-vous à la documentation) :

- \vref{référence} : insère le numéro de section et remplace le numéro de page par « page précédente » ou « page suivante » si la référence se trouve à la page précédente ou suivante.

- \vpageref{référence} : insère le numéro de page et le remplace par « page précédente » ou «page suivante » si la référence se trouve à la page précédente ou suivante.

- \vrefrange{référence1}{référence2} : insère une référence à une plage de pages du type « tableau 2.5 à 2.8 pages 2-3 ».

- \fullref{référence} : insère directement les références sous la forme « 2.1 page 2 ».

- \Vref{référence} : est similaire à \vref{référence} sauf que le premier caractère de la référence est mis en majuscule. Il ne doit pas s'agir d'un caractère accentué (sauf à utiliser la forme \'{e}) ou d'un nombre (0 à 9) sinon un message d'erreur apparaîtra à la compilation.

- \Ref{référence} : est similaire à \ref{référence} sauf que le premier caractère de la référence est mis en majuscule. Il ne doit pas s'agir d'un caractère accentué (sauf à utiliser la forme \'{e}) ou d'un nombre (0 à 9) sinon un message d'erreur apparaîtra à la compilation.

Comme on peut le voir, cette extension apporte un confort non négligeable quant à la présentation des références croisées.

Voici d'ailleurs un exemple afin de vous permettre de comparer.

Exemple avec l'extension varioref

Fichier test.tex

% packages utilisés
\documentclass[a4paper,12pt,french]{article}
\usepackage[top=2cm, bottom=1.5cm, left=1.5cm, right=1.5cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{varioref}
\usepackage[french]{babel}
\begin{document}
\section{ma première section}
\subsection{ma première sous-section}
\lipsum[1]\label{mareference}
\newpage
\section{ma seconde section}
Comme vu \fullref{mareference}

Comme vu \vref{mareference}

Comme vu \vpageref{mareference}
\end{document}

Voici un exemple de l'utilisation de \vrefrange{référence1}{référence2}.

Fichier test.tex

% packages utilisés
\documentclass[a4paper,12pt,french]{article}
\usepackage[top=2cm, bottom=1.5cm, left=1.5cm, right=1.5cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{varioref}
\usepackage[french]{babel}
\begin{document}
\section{ma première section}
\subsection{ma première sous-section}
\lipsum[1]\label{maref1}
\newpage
\section{ma seconde section}
\subsection{ma seconde sous-section}
\lipsum[1]\label{maref2}
\newpage
\section{ma troisième section}

Comme vu \vrefrange{maref1}{maref2}, bla\ldots
\end{document}

IV-B - L'extension hyperref

Hyperref est une extension très utilisée lors de la génération de fichiers PDF, car elle permet de mettre des liens hypertextes dans une table des matières, ce qui permet de parcourir facilement un document. Les liens et les citations bibliographiques peuvent être colorés, nombres de paramètres d'un PDF peuvent être réglés grâce à cette extension. Comme toujours, je vous encourage à lire la documentation.

Cette extension contient une autre extension nommée nameref qui peut être appelée indépendamment d'hyperref. Donc, si vous avez chargé hyperref, vous en bénéficiez automatiquement, il est donc inutile de la recharger.

Grâce à nameref, vous pourrez faire référence à une section, sous-section… avec son libellé en lieu et place de son numéro. Ceci peut, selon le contexte, être utile lors de vos rédactions.

Une commande d'hyperref mérite attention. Il s'agit de \autoref{mareference}. Elle permet de faire apparaître le nom de la structure hiérarchique du document dans le texte.

N'oublions pas la commande \url{URL} qui permet d'insérer comme lien cliquable une adresse internet, ce qui peut être bien commode.

Exemple avec l'extension hyperref

Par défaut les liens apparaissent entourés d'un cadre qui, normalement, n'est pas imprimé.

Fichier test.tex

% packages utilisés
\documentclass[a4paper,12pt,french]{article}
\usepackage[top=2cm, bottom=1.5cm, left=1.5cm, right=1.5cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage[french]{babel}
\usepackage{hyperref}
\begin{document}
\section{ma première section}
\subsection{ma première sous-section}
\lipsum[1]\label{mareference}
\newpage
\section{ma seconde section}

Comme vu à \nameref{mareference}

Comme vu \autoref{mareference}

Lisez \url{http://www.developpez.net/forums/}
\end{document}

IV-C - L'extension cleveref

Afin de parfaitement utiliser cette extension, il est impératif de bien lire la documentation. En effet, celle-ci permet de personnaliser les formats d'affichage des références quel que soit leur type.

Cette extension, outre une grande possibilité de personnalisation, offre des commandes et possibilités pour le moins intéressantes.

- \cref{label 1,...,label n} : permet d'obtenir des références de la forme « section (1) à (3) et (4) ».

- \Cref{label 1,...,label n} : fait la même chose que la commande \cref{label 1,...,label n} en mettant la première lettre du terme précédant les références en majuscule, ce qui donne, par exemple « Section (1) à (3) et (4) ».

- \cpageref{label 1,...,label n} : permet d'obtenir des références de la forme « page (1) à (3) et (4) ». La version \Cpageref{label 1,...,label n} mettra un « P » majuscule au mot « page ».

- \namecref{label 1} : affichera le nom de la structure hiérarchique (section, sous-section...). \nameCref{label 1} fera la même chose mais en mettant une majuscule au nom de la structure hiérarchique.

\namecrefs{label 1} et \nameCrefs{label 1} font exactement la même chose que les deux commandes précédentes mais en terminant par un « S » le nom de la structure hiérarchique pour qu'il soit au pluriel.

Il existe à chaque fois une commande comportant une majuscule identique à une autre n'en comportant pas. L'une ne met pas de majuscule au terme précédant les références, l'autre en met une.

Exemple avec l'extension cleveref

Fichier test.tex

% packages utilisés
\documentclass[a4paper,12pt,french]{article}
\usepackage[top=2cm, bottom=1.5cm, left=1.5cm, right=1.5cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{cleveref}
\usepackage[french]{babel}
\begin{document}
\section{ma première section}
\subsection{ma première sous-section}
\lipsum[1]\label{mareference}
\newpage

\section{ma seconde section}
Comme vu \cref{mareference}

Comme vu \Cref{mareference}

Comme vu \cpageref{mareference}

Comme vu \Cpageref{mareference}

Comme vu \namecref{mareference}

Comme vu \nameCref{mareference}

Comme vu \namecrefs{mareference}

Comme vu \nameCrefs{mareference}
\end{document}

Exemple avec \cref, \Cref, \cpageref et \Cpageref.

Fichier test.tex

% packages utilisés
\documentclass[a4paper,12pt,french]{article}
\usepackage[top=2cm, bottom=1.5cm, left=1.5cm, right=1.5cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{cleveref}
\usepackage[french]{babel}
\begin{document}
\section{ma première section}
\subsection{ma première sous-section}
\lipsum[1]\label{maref1}
\newpage
\section{ma seconde section}
\subsection{ma seconde sous-section}
\lipsum[1]\label{maref2}
\newpage
\section{ma troisième section}
\subsection{ma troisième sous-section}
\lipsum[1]\label{maref3}

\newpage
\section{ma quatrème section}
Comme vu \cref{maref1,maref2,maref3}, bla\ldots

Comme vu \Cref{maref1,maref2,maref3}, bla\ldots

Comme vu \cpageref{maref1,maref2,maref3}, bla\ldots

Comme vu \Cpageref{maref1,maref2,maref3}, bla\ldots
\end{document}

V - Faire référence à une référence grâce aux liens hypertext

Il est possible de faire des liens internes au document, ce qui permet de se déplacer rapidement et facilement lorsqu'il s'agit d'un document important.

Il y a une restriction à garder à l'esprit : un lien ne peut avoir qu'une seule destination.

Voici la façon de faire avec l'extension hyperref.

Exemple avec l'extension hyperref

\hyperlink{depart}{\hypertarget{retour}{mot 1}} … plus loin dans le texte … \hypertarget{depart}{\hyperlink{retour}{mot 2}}

Quel est l'intérêt de cette astuce ?

Imaginons que vous soyez enseignant et prépariez une liste d'exercices pour vos élèves avec à la fin du document les corrections. Tant pour vous que pour l'élève, il peut être vite fastidieux de faire défiler le document dans son intégralité afin d'aller lire la correction. Avec cette astuce, il est facile de créer un lien cliquable entre l'exercice et sa correction qui permet de naviguer de l'un à l'autre au sein du document.

Ainsi, il suffirait par exemple d'introduire le texte suivant au niveau de l'exercice \hyperlink{exercice1}{\hypertarget{solution1}{Voir la solution.}}.

Puis, \hypertarget{exercice1}{\hyperlink{solution1}{Retour énoncé.}} au niveau de la solution afin de permettre la navigation de l'un à l'autre.

VI - Conclusion

Comme vous l'avez vu au cours de cet article, poser et utiliser des références croisées n'est pas vraiment difficile.

Que celles-ci soient posées dans des notes de bas de page, des tableaux, du texte ou encore des flottants, la facilité à les créer et les utiliser avec LaTeX permet d'en user et abuser.

En plus des nombreuses possibilités qu'offre LaTeX, vous avez là encore l'avantage d'obtenir des documents de grande qualité avec un minimum d'efforts. Et donc, n'hésitez pas, lâchez-vous !

VII - Remerciements

Tout mes remerciements à -Nikopol- et f-leb pour la relecture technique, ainsi que ced pour la relecture orthographique.