Préparer l’index et les renvois en markdown : de Zettlr à LibreOffice
Il y a quelques jours, Arthur Perret publiait ce billet concernant l’indexation de sa thèse en ligne : des solutions pour pouvoir prévoir, dès le texte markdown (avant le transfert sur un logiciel de traitement de texte plus poussé comme LaTeX ou LibreOffice, avant la mise en forme), des entrées d’index. Allez lire son billet, il revient sur ce qu’est un index, son intérêt, pourquoi il peut être intéressant de le préparer avant la toute fin de la rédaction, et sur les outils possibles.
L’usage développé dans son billet concerne LaTeX, qui gère globalement beaucoup mieux tout ça que LibreOffice… mais personnellement j’utilise LibreOffice pour la thèse, pour des raisons pragmatiques de compatibilité de formats avec ceux qu’utilise ma directrice de thèse. À mon tour de produire un petit billet pour le cas spécifique des rédacteurices qui, comme moi, rédigeraient sur Zettlr1, et qui souhaiteraient pouvoir préparer un index pour future utilisation sous LibreOffice ; certains points sont techniques, alors je fournis ma solution “clés en main” à la fin pour qui veut, adaptable si besoin. J’insiste : ce dont je parle là n’est pas immédiatement transposable pour Word, et est inutile pour LaTeX, qui a un fonctionnement plus transparent en termes de code.
D’abord, l’intérêt général :
- Ne pas réserver la création de l’index pour le rush ultime du rendu du manuscrit. Si on se contente d’un index des noms propres, ça passe. Si on veut un index des notions, c’est beaucoup plus compliqué : pour bien le faire, il vaut mieux le faire en amont, vérifier l’ordre des entrées et sous-entrées, bien penser la chose en cours de route. Personnellement, je prévois (et on verra le moment venu ce que je ferai vraiment…) d’avoir trois index : index des noms propres, index des autrices et œuvres du corpus, index des notions. Un fichier de concordance est utile2, mais pas du tout optimal en termes de précision utilisé comme simple outil de rechercher-remplacer automatique, surtout pour l’index des notions.
- Voir les entrées d’index et les renvois au moment des relectures : un vrai bonus de Zettlr si cette solution est choisie, me semble-t-il. Sous Word, les entrées d’index sont visibles quand on active le mode “voir les marques de formatage” : mais ça rend le texte assez illisible. Sous LibreOffice, ça reste très opaque, on peut voir une barre droite grisée, et l’entrée s’affiche lorsqu’on place la souris dessus ; mais il est difficile de revenir sur les entrées insérées, etc. Au contraire sous Zettlr, le mode de présentation fait que les balises sont à la fois visibles et cachées : cf. vidéo ci-dessous, à la relecture, grâce au jeu de couleurs, on repère les passages indexés mais rien ne pollue le texte. C’est du texte pur, seulement masqué par Zettlr pour ne pas parasiter la lecture. Il me semble que c’est hyper utile pour bosser progressivement l’index au cours des relectures, de manière plutôt fluide que fastidieuse.
- Ne pas risquer de faire planter ou lagger le logiciel, en lui demandant de faire des manips de métadonnées (enregistrement des entrées d’index et de renvois) sur un fichier hyper lourd, le fichier final de la thèse. Je ne sais pas si mon cas est généralisable ou pas, mais de mon côté, ma version de LibreOffice sous Ubuntu est relativement instable et crée facilement des bugs, je préfère pouvoir lui passer des commandes les plus simples possibles.
Plan de l’article :
Quelques utilisations
Il me semble que la création d’un index est de toute façon fastidieuse… à partir du moment où on décide qu’un fichier de concordances automatique ne suffit pas pour faire un vrai bon index. Il y a du travail “humain” à faire, disons. Alors bon : voilà quelques illustrations de ce que ça peut donner, en cours de route pendant la rédaction ; j’optimiserai peut-être, puisque je viens seulement de commencer !
D’abord, le grand avantage de Zettlr pour l’index, à mon sens : pouvoir afficher/masquer les entrées d’index. J’ai fait une capture vidéo de mon écran ; on n’y voit pas la souris c’est dommage mais vous avez l’essentiel, vous pouvez voir que je vérifie successivement les entrées d’index “Nicole Brossard”, “Yolande Villemaire”, “Pauline Harvey”, “Sollers”, “Androgyne” et “champ littéraire féministe” (en cliquant dessus : quand je clique, ça s’ouvre, quand je clique ailleurs, ça se replie). Vous pouvez voir que mon texte est tout plein de balises diverses, qui m’aident à repérer la structure du texte, qui construiront l’index définitif, mais qui seront invisibles dans le fichier final, et qui ne gênent pas non plus la lecture pour le moment.
Évidemment, enregistrer ces entrées reste fastidieux. Dans tous les cas, j’utilise le raccourci ctrl+k pour insérer mes balises : c’est le raccourci standard d’une création de lien, puisque j’utilise les balises “lien” de Zettlr pour faire mes entrées d’index et mes renvois (j’arrive plus bas pour l’explication technique). Plusieurs solutions :
-
Les auto-corrects personnalisés et précis : si j’écris “Françoise d’Eaubonne”, ou même en fait juste “Eaubonne”, Zettlr enregistre automatiquement une entrée d’index. Pareil si je parle des Guérillères de Monique Wittig : bim, entrée d’index. Marche pour toutes les entrées récurrentes, à prévoir une fois pour toutes.
- Les rechercher-remplacer, évidemment : si je cherche tous les “Louky Bersianik” pour les remplacer par “[Louky Bersianik](index=”Bersianik”)”, ou bien toutes mes occurrences de “patriarcat” par “[patriarcat](index=”patriarcat””)”, ça fait gagner un max de temps (en fin de rédaction seulement cela dit, et il faut repasser à la main derrière car, exactement comme pour les tableaux de concordance ordinaires de Word et LibreOffice, ces rechercher-remplacer automatiques sont régulièrement fautifs ou malhabiles).
- Les autocorrects de semi-complétion : si j’écris “clé;”, bim, la balise appropriée apparaît pour me permettre de renseigner les informations d’une entrée d’index. Un exemple en vidéo, pour différents types d’entrée (notion, puis autrice, puis œuvre). Au coup par coup, c’est utile ; ça reste plus fastidieux que les premières techniques, c’est plutôt pour le détail ou les entrées rares ici.
Note supplémentaire : j’utilise trois “key1”, qui correspondent à mes trois index distincts (notions, noms propres, corpus). C’est aussi du bricolage : c’est parce que LibreOffice ne permet pas de créer plus de deux index lexicaux. Je fais un caprice en en voulant trois, alors je contourne : j’en fais un seul, divisé en trois grandes sections ; je l’insère en format “modifiable” dans mon fichier odt final, et comme ça ensuite je le mets en forme pour qu’il ressemble réellement à trois index différents.
L’ensemble est connecté dans un fichier de correspondances, indiquant mes clés (par exemple “NPCE” pour “1982, Nous parlerons comme on écrit“, Wittig pour “Wittig, Monique”, etc.), ainsi que les référencements de key1 et key2 (key1 : noms propres, notions ou corpus ; key2, par exemple dans le cas de “NPCE”, “Théoret, France”). Les modifications de structure d’index se jouent donc dans un fichier à part, construit ainsi :
Ça fait un gros fichier c’est sûr, mais propre et efficace avec des Ctrl+F :
Et le résulat (exemples tirés de l’indexation d’un chapitre isolé) :
Pour les renvois c’est le même fonctionnement, j’utilise aussi les liens. Il faut pouvoir :
1. Définir un “repère de texte” (dans le jargon de LibreOffice) : dans l’exemple ci-contre, au milieu d’un passage qui développe la notion de “fait divers”, j’ai donc inséré un marquage “ref=fait-divers”.
2. Ensuite, au milieu d’un autre texte, je voudrais faire référence à ce premier : comme il est (apparemment) préférable de le faire en note plutôt que dans le corps de texte, j’appelle une note : [^renvoichap], en langage markdown/Zettlr.
3. Au moment de définir ma note, j’introduis de factices “??” (qui seront automatiquement remplacés par le numéro de page dans le fichier final par la suite) associés à une balise “renvoi=fait-divers”.
Problèmes
Donc, chez moi en tout cas, maintenant, ça marche : mais il a fallu bricoler. Zettlr n’est pas prévu pour créer des index ; Pandoc, le logiciel qui traduit un texte d’un format à un autre (de markdown à tex, à odt, à docx, etc.), non plus ; LibreOffice a un fonctionnement plus opaque que LaTeX ou markdown, précisément la raison pour laquelle je préfère ne pas vraiment écrire ma thèse dessus, mais l’utiliser juste ponctuellement pour éditer de belles versions du texte.
Les problèmes spécifiques, par rapport à ce dont parle Arthur dans son billet :
- Côté LibreOffice. Contrairement à un texte écrit en LaTeX, le code d’un texte sous LibreOffice est opaque. Concrètement, quand vous enregistrez une entrée d’index ou un repère de texte, presque impossible de les repérer facilement à l’œil. Pour les retrouver vraiment, il faut pouvoir accéder à la version xml du texte, donc décompresser le fichier odt, puis naviguer dans un doc très dense et obscur. C’est : peu pratique. On finit néanmoins par trouver les balises. Ça donne ce genre de choses :
- Pour les entrées d’index : <text:alphabetical-index-mark text:string-value=”Wittig, Monique” text:key1=”Œuvres”/>3
- Pour les repères de texte : <text:bookmark text:name=”Son identifiant”/>
- Pour les renvois aux repères de textes : <text:bookmark-ref text:reference-format=”page” text:ref-name=”Son identifiant”>x</text:bookmark-ref>
- Côté Pandoc. On pourrait se dire “chouette, trop facile, je n’ai qu’à programmer un filtre Pandoc pour qu’il insère cette balise exactement dans le xml à chaque fois que je lui en passe la commande !” (comme, en fait, dans le billet publié par Arthur Perret). Oui mais non : quand on ouvre un document odt avec Pandoc, on s’aperçoit que Pandoc n’interprète pas les balises d’indexation ni de renvoi : elles n’existent pas à ses yeux, il n’arrive pas à les lire. A fortiori, il n’arrivera pas à les créer, dans l’autre sens, quand on lui demandera de créer un doc odt4
J’ajoute à ces problèmes-là un souci de lisibilité : alors que la balise officielle de Pandoc est [texte]{commande} (entre accolades, donc), je préfère pour le moment utiliser des parenthèses — [texte](commande) — parce que Zettlr arrive à en masquer le contenu (cf. vidéo au-dessus), alors que ce n’est pas le cas — pour le moment — pour les accolades. Donc je choisis de faire “comme si” c’étaient des liens (crochets puis parenthèses, en mardown, c’est un lien), puisque Zettlr réagit bien aux liens.
Il faut donc trouver des moyens pour :
- Coder quelque chose pour désambiguïser mes vrais liens et mes faux liens, qui sont en fait des balises : soit des entrées d’index, soit des renvois.
- En outre, faire en sorte que le contenu de ces balises soit utilisé dans ses caractères spéciaux initiaux.
- Insérer les balises xml que Pandoc ne comprend pas dans le texte : le forcer à faire une chose qui ne lui plaît guère.
Tuto proposition (très bricolée)
Obligé·es donc de trouver des moyens de contournement. Je n’ai pas fait ça seule, on a planché avec une personne qui code de mon entourage proche : on n’a pas trouvé mieux, pour le moment, que
- Dans le fichier markdown, écrire les balises entre parenthèses, à ma sauce. Pour un index : [texte](index=”Wittig”) ; pour un renvoi : [texte](ref=”texte-de-ref”) et [??](renvoi=”texte-de-ref”).
- Moulinette n°1. Avant de passer la commande Pandoc pour transformer le fichier markdown en fichier odt, passer le premier dans une moulinette qui transforme toutes les parenthèses pertinentes en accolades5.
- Passer la commande Pandoc : les balises apparaissent en plein texte dans le fichier, autrement dit laisser tomber l’idée que Pandoc les interprète, il les restitue telles quelles.
- Moulinette n°2. Passer le fichier odt généré par Pandoc dans une seconde moulinette, qui quant à elle traduit toutes les balises plein texte en entrées d’index, repères de texte et renvois — en passant par une série de manips, dont décompression du fichier odt pour pouvoir entrer dans le code xml, insertion, re-compression.
→ Le tout enregistré dans un seul script, donc de mon côté je n’ai rien d’autre à faire que lancer une seule commande, mais il se passe tout ça derrière.
On l’a mis à disposition sur Git ; c’est un mélange de code réutilisable et de code très personnalisé pour ma propre configuration de fichiers et d’écriture : à réécrire par bouts pour adapter aux autres usages. Pas franchement optimal dans la série des manips mais quant au résultat, ça fonctionne du feu de dieu chez moi ! Seule chose que j’aie à faire par rapport à mes fichiers de rédaction : lancer la commande ./these_compile “[numéro du chapitre]” “[nom du fichier odt de sortie]” et mon doc sort tout beau tout prêt.
Loin d’être aussi propre que ce que proposait Arthur par rapport à LaTeX, mais… efficace quand même.
Notes :
- J’ai essayé de parler des mérites du logiciel par ici et, plus geek, par là aussi [↩]
- J’avais cherché comment faire un index multiple pour Word par là. [↩]
- Il semble que selon les versions de LibreOffice ce ne soit pas toujours les mêmes balises, attention, parfois il y a une combinaison d’ouvrantes et fermantes… à changer dans le script si besoin. J’ai la version 7.3.7.2 30. [↩]
- Enfin, je crois. Il y a des pistes à creuser du côté des filtres lua quand même… [↩]
- Sinon Pandoc les insérera dans le fichier final comme des liens, et ça complique la suite. [↩]
OpenEdition vous propose de citer ce billet de la manière suivante :
Aurore Turbiau (9 mars 2023). Préparer l’index et les renvois en markdown : de Zettlr à LibreOffice. Littératures engagées. Consulté le 8 décembre 2024 à l’adresse https://doi.org/10.58079/oe12