Gestion des liens dans un document

Posté le 19-10-2022 par Aliaume Lopez – lecture en 6 minutes (≈ 1440 mots)

L’objectif de ce petit billet est d’introduire une extension du système d’édition de documents LaTeX, permettant de gérer les bases de connaissances via des liens. L’idée est de commencer par expliquer ce qui existe, et de positionner cette extension par rapport aux autres technologies existantes.

Pourquoi mettre des liens dans un document ?

Dans un papier de recherche, il y a essentiellement deux raisons pour lesquelles ont veut utiliser un lien:

  1. Pour renvoyer le lecteur à une source externe de connaissances.
  2. Pour aider le lecteur à naviguer au sein du document.

Dans un document de recherche, on aura par exemple des références externes (i.e., des citations), ainsi que des références internes à des sections ou points d’intérêt dans le document. Cette idée consistant à systématiquement intégrer au document les références permettant de découvrir les autres documents liés aux domaines, font des articles de recherche une base de connaissance explorable.

Cette idée est celle qui a longtemps guidé la construction des pages sur le web, où les liens internes/externes sont cruciaux pour naviguer et retrouver l’information disponible. Néanmoins, cette méthode se heurte à plusieurs murs de complexité:

  1. Il n’est pas possible pour un humain d’explorer tout le graphe.
  2. Les liens peuvent ne plus être valides, il faut une maintenance constante des correspondances entre liens et documents cités.
  3. Les documents sont hétérogènes, et donc les formats de lien varient.

En particulier, sur un « document » comme wikipedia, il faut nécessairement ajouter aux liens internes aux pages, un moyen de chercher directement dans le contenu des pages, et de faire référence à des pages, et des sections particulières des pages. C’est ce qui est obtenu en regardant les URI proposées sur wikipedia: elles ont la forme http://[langue].wikipedia.org/wiki/[nom-de-page]#[nom-de-section].

Un exemple particulièrement mauvais de site web est celui de l’ENS Paris-Saclay qui ne permet pas du tout de retrouver facilement l’arborescence des pages disponibles, ni de retrouver simplement l’information. Plus généralement, dans un livre on aimera la présence d’un index, d’une table des matières, des figures, et la présence généralisée de pointeurs aidant à la navigation au sein du document.

Des liens dans du texte

Un problème loin d’être anodin se pose lorsque vous avez des liens dans un document: comment doivent-ils être affichés ? Cela peut sembler une question futile, il n’en est rien. Un certain nombre de documents sont destinés à l’impression, parfois sans couleurs, où la question est cruciale. Pour des documents plus interactifs (PDF, page web), il est nécessaire de penser à l’accessibilité: fournir un texte alternatif pour les liens, et préciser ce vers quoi ils doivent mener est crucial pour la pérennisation du document. Si on en croit un article de blog publié par CloudFare intitulé The History of the URL, un nombre croissant de liens sont des liens morts, c’est-à-dire dont la destination n’existe plus:

One half of the URLs referenced by US Supreme Court opinions point to pages which no longer exist. If you were reading an academic paper in 2011, written in 2001, you have better than even odds that any given URL won’t be valid.

The History of the URL, Section “Snapchat the Supreme Court”

Le problème est encore plus visible pour les références qui pointent vers des parties du même document, car l’échelle de temps est beaucoup plus courte. Si vous avez une table dans un rapport, nommée Table 1, alors vous pouvez y faire référence en disant voir Table 1. Mais ajouter une autre table à votre document … et l’intégralité des liens est à reconstruire. Vous avez quelque chose de pire qu’un lien mort: un faux lien.

Le problème des “références cassées” se règle généralement par le biais d’une autorité centrale qui assigne un identifiant unique à chaque document, sans relation avec l’endroit où le document est disponible. Les numéros ISBN ou les DOI rentrent complètement dans cette catégorie. Dans le cas de références internes d’un document écrit avec LaTeX, cela se traduit concrètement via l’attribution de labels à certaines parties du document.

Résumé du cahier des charges

Pour gérer correctement les liens dans un document on veut facilement pouvoir faire les choses suivantes

  1. Utiliser une autorité centrale pour assigner des identifiants uniques.
  2. Proposer plusieurs manières de parler d’une même ressource.
  3. Intégrer un maximum d’informations dans le texte pour permettre de retrouver l’élément cité, sans nuire à la lisibilité.
  4. Permettre l’exploration des liens.

Ce qui existe pour l’instant en LaTeX

Dans un document LaTeX, les liens internes sont obtenus par une double passe. Dans un premier temps, on définit des points d’intérêts dans le document via une commande \label. Dans un second temps, on peut alors créer des liens vers ce point d’intérêt avec la commande \ref ou \pageref. En terme de cahier des charges, cela ne répond à presque aucun des pré-requis.

  1. L’autorité qui gère les identifiants n’est pas centralisée: c’est l’auteur qui est le point de synchronisation. Pour un document à plusieurs auteurs, les identifiants sont éparpillés dans le document, et il n’y a pas de moyen de garantir une cohérence interne.
  2. On ne peut pas référencer un même identifiant de plusieurs manières. En pratique, on peut seulement retrouver la page où l’étiquette est placée via \pageref, et retrouver un numéro associé à l’étiquette via la commande \ref. Ainsi, on doit écrire Figure \ref{identifiant} pour que s’affiche Figure 2 dans le document final. Si l’identifiant a été changé et ne correspond plus à une figure, le lien reste valide, mais le texte est incorrect.
  3. Il n’est en général pas possible de préciser des marqueurs spatiaux ou sémantiques pour aider le lecteur à se repérer. Ainsi, “en haut de la page”, “avant la définition”, “au début de la section”, sont autant de phrases qui sont à ré écrire dès que les éléments cités changent de place.
  4. LaTeX propose de faire une table des matières via \tableofcontents. Il est aussi possible de faire une liste des figures, des tableaux, mais le processus n’est pas générique. Par exemple, écrire une liste des “définitions utilisées” dans un chapitre n’est pas une attente réaliste au vu de la technologie employée.

Plus généralement, il y a deux énormes problèmes dans cette gestion des liens. Le premier est qu’elle ignore totalement l’une des principales utilités de LaTeX, à savoir, la typographie des expressions mathématiques. Le second est que cette gestion se fait séparément des références externes, et celles-ci sont elles-mêmes découpées en deux parties: les hyperliens classiques, et les citations bibliographiques.

Des solutions partielles existent pour les problèmes cités. Le paquet natbib propose de faciliter l’écriture des citations en permettant d’écrire des commandes comme \citet[see][Theorem 1.6]{label}, se traduisant en Auteur 1, ... [see Theorem 1.6 of 2]. De même, un paquet comme cleveref ajoute une commande \cref{label} permettant d’ajouter automatiquement les dénominations (Figure, Théorème, Définition, Table) avant le numéro associé.

Une approche en deux étapes

Bien que proposant énormément de fonctionnalités, le paquet knowledge développé par Thomas Colcombet donne une réponse simple au problème des références internes, de la même manière que les ISBN ou les DOI. En utilisant ce paquet, deux commandes sont disponibles \intro et \kl (l’équivalent de label et cite), avec comme seule différence que la gestion des correspondances est déléguée à une autorité tierce. En pratique, les utilisateurs du paquet se voient écrire un document knowledges.kl contenant pour chaque “notion du document” une variété de synonymes et des propriétés stylistiques.

L’introduction d’un document tiers simplifie la collaboration, la découverte, et la ré-utilisation des liens du document. Elle permet aussi de répondre, de manière rudimentaire, aux besoins évoqués plus haut. L’utilisation de synonymes autorise d’écrire \kl{La première section} dans le corps du document, et d’expliquer dans la base de connaissances que La première section est la même chose que Section 1.

Par ailleurs, le paquet autorise l’utilisation de liens pour les références mathématiques, permettant de cliquer sur un symbole pour voir son introduction… magique non?

Dans un futur proche ?

On est encore loin d’une gestion correcte des liens dans un document, puisque knowledge n’unifie pas les citation bibliographiques, les liens externes, et les liens internes. S’il propose de s’interfacer avec la librairie cleveref, cela reste une manière très simpliste d’exprimer la position d’une connaissance dans le document. De plus, le système de connaissances fonctionne en vase clos: dans le document final comme dans ses métadonnées, rien n’existe pour permettre l’exploration des liens.

En conclusion, le paquet knowledge possède un énorme potentiel en terme d’écriture collaborative, de rédaction de documents volumineux, et même de création de graphes de connaissances. Reste à savoir comment le faire évoluer vers une solution complète au problème posé. Avec un peu de chance, il y aura bientôt un nouveau billet de blog sur les avancées développées avec Thomas…