Numéros de ligne dans les en-têtes

dimanche 14 juillet 2013, mise à jour mercredi 24 juillet 2013, par Maïeul
Suivre la vie du site RSS 2.0 Forum

La version 1.5 de eledmac, qui vient de sortir, propose un nouvel outil permettant de préciser le numéro de ligne dans les en-têtes de page. Voici comment.

Le problème

Soit un texte avec des lignes numérotées en continu, du début à la fin du texte. Le but est de pouvoir mettre dans les en-têtes de page le numéro de ligne de début et de fin de page, comme dans l’exemple ci-dessous.

Exemple de mis en page avec les numéros de ligne dans les en-têtes

Principe général

Dans mon livre, j’explique dans le chapitre 22 comment :

  • utiliser le package fancyhdr pour personnaliser les en-têtes.
  • utiliser la commande \markboth pour mémoriser des données qui seront ré-utilisées dans l’entête.

Dans le cas présent, nous souhaitons :

  • mettre à gauche le numéro de la première ligne de la page.
  • mettre à droite le numéro de la dernière ligne de la page.

Nous allons donc devoir utiliser, à chaque ligne :

\markboth{numero de ligne}{numéro de ligne}
\fancyhead[LE,LO]{\rightmark}
\fancyhead[RO,RE]{\leftmark}

Rappelons que la commande \markboth prend deux arguments : <marqueur gauche> et <marqueur droit. Dans le cas présent, il s’agit à chaque fois du numéro de la ligne.

Dans le code ci-dessus, nous disons qu’à gauche nous appelons la commande \rightmark. Contrairement à ce que son nom indique, elle n’est pas forcément appellée uniquement à droite, mais contient, dixit moi-même [1] :

l’argument ⟨marqueur droit⟩ de la première commande \markright ou \markboth située sur la page courante.

Soit dans le cas présent, le premier numéro de ligne sur la page présente.

Inversement, à droite nous appelons \leftmark, qui retourne, dixit moi-même [2] .

l’argument ⟨marqueur gauche⟩ de la dernière commande \markboth.

Soit dans le cas présent, le numéro de la dernière ligne.

Reste à mettre en place la commande \markboth à chaque ligne.

Mise en œuvre

Comme on ne peut définir à l’avance où seront les ruptures de lignes, le mieux est de confier l’appel à \markboth à eledmac. C’est là qu’intervient la nouvelle version.

Il était déjà possible de dire à eledmac d’exécuter certaines actions à chaque ligne, en redéfinissant la commande \do@linehook. Cependant, cette commande était appelée avant l’impression de chaque ligne, ce qui posait des problèmes de mise en page avec \markboth [3].

La commande \do@insidelinehook quant à elle est appelée au début de l’impression de chaque ligne. Elle résout ainsi ces problèmes de mis en page. Il suffit donc de la redéfinir, en lui disant de passer \the\line@num comme arguments à \markboth.

La séquence \the\line@num permet de retourner la valeur du compteur TeX [4] \line@num, qui correspond au numéro de ligne tel que défini par eledmac.

Comme toutes ces commandes ont des @ dans leurs noms, il faut les appeller entre \makeatletter et \makeatother.

Ce qui donne donc :

\makeatletter
\renewcommand{\do@insidelinehook}{\markboth{\the\line@num}{\the\line@num}}
\makeatother

Résultat final

Nous avons donc un préambule contenant les lignes suivantes :

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead[LE,LO]{\rightmark}
\fancyhead[RO,RE]{\leftmark}

\usepackage{eledmac}
\makeatletter
\renewcommand{\do@insidelinehook}{\markboth{\the\line@num}{\the\line@num}}

Qui donne bien le résultat désiré, et présenté plus haut. Vous trouverez ci-dessous le fichier complet.

Obtenir les numéro de ligne dans les en-têtes

Notes

[1J’ai eu un peu de mal à écrire ce paragraphe, alors je me permet de m’auto-citer, p.194.

[2Toujours du mal à écrire ce paragraphe, alors toujours auto-citation à la p. 194.

[3Pour plus de détails, on consultera le ticket 112.

[4Et non LaTeX.

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