Convertir en notes de bas de page du texte balisé
April 06, 2010 | Snippets | fr | en
Bon, nous disposions d'un script pour réinjecter des notes de bas de page vers le texte principal (cf. « UnFoot », août 2009). Et maintenant, peut-on inverser l'opération ? Plus généralement, comment convertir en notes de bas de page un jeu de textes balisés ? Le script ReFoot offre une solution simple et prête à l'emploi aux utilisateurs d'InDesign CS4++...
Comment ça marche ?
Supposons que votre article (ou le document tout entier) soit formaté comme ceci :
À ce stade, toutes les notes de bas de page « en puissance » se signalent, dans le texte, entre crochets : <NOTE>.
Le script propose également deux formats de balisage plus XML-friendly : <note>NOTE</note>
et <footnote>NOTE</footnote>
. Mais vous pouvez sans problème ajouter d'autres motifs de balisage si vous avez quelque expérience des expressions régulières. Pour ce faire, ouvrez le script dans un éditeur et étendez les choix offerts par l'objet FOOTNOTE_PATTERNS
déclaré au début du code :
var FOOTNOTE_PATTERNS = { "<footnote>NOTE</footnote>" : "<footnote>([^<]+)</footnote>", "<note>NOTE</note>" : "<note>([^<]+)</note>", "<NOTE>" : "<([^>]+)>", };
Lorsque vous lancez ReFoot.js depuis la palette Scripts, vous obtenez une boîte de dialogue rustique qui vous permet de choisir le balisage approprié (issu du jeu FOOTNOTE_PATTERNS
) :
Il ne reste plus qu'à presser le bouton « OK » :
Limitations
• Motifs d'expressions régulières. — Les motifs fournis par défaut ne reconnaissent pas une note qui contiendrait, soit un crochet ouvrant, soit un crochet fermant (selon les cas). Par conséquent, il vous faudra peut-être ajouter des motifs moins triviaux pour manipuler des notes structurellement plus corsées. Lors de la création d'un nouveau motif d'expression régulière, gardez bien à l'esprit que votre regex sera à la fois interprétée par le moteur GREP d'InDesign et par la couche RegExp de JavaScript. Les deux ne coïncident pas en tous points. Vous devez enfin utiliser des parenthèses capturantes de niveau 1 afin d'isoler la note visée ($1
) à l'intérieur du motif général ($0
).
• Styles. — L'actuelle version de ReFoot.js crée uniquement des notes de bas de page « plein texte », c'est-à-dire sans enrichissement. Par conséquent, toute mise en forme de caractère appliqué au niveau du balisage sera perdue.
(Merci à Christoph Weis qui m'a donné l'idée de ce petit script.)
• Voir aussi : UnFoot.js
Comments
En gros, tout texte entre crochets, la numérotation précédée de # étant juste pour souligner l'astuce dans l'exemple… Mais c'est bien pratique cela car cela permet de préparer son texte au kilomètre dans un éditeur de texte lambda et de l'injecter ensuite dans InDesign sans se soucier des notes qui seront construites à la volée…
Marc, si les symboles "<" et ">" sont utilisés ailleurs, peut-on les substituer…? À priori oui…?
A priori oui, et même a posteriori.
Cela suppose seulement de mettre les mains dans la syntaxe Grep/regex. Par exemple, si tes notes sont entre ACCOLADES plutôt qu'entre crochets, tu vas ajouter dans le bloc FOOTNOTES_PATTERN du script le motif suivant:
"{NOTE}" : "\\{([^}]+)\\}",
Celui-ci est un peu complexe parce qu'il est nécessaire d'échapper les accolades ouvrantes et fermantes situées aux extrémités, étant donné qu'elles ont une signification particulière dans les motifs d'expression régulière.
J'en profite pour signaler un point important: au niveau du programme JavaScript, il faut utiliser deux antislashes ( \\ ) pour échapper un symbole réservé.
Ceux d'entre mes lecteurs qui souhaitent acquérir une bonne maîtrise de la syntaxe Grep se reporteront utilement à l'ouvrage et au site de Laurent Tournier entièrement consacré à ce sujet:
http://www.indigrep.com
Bonjour.
Script parfait, mais on perd la numérotation des notes et l’appel de note dans le texte.
Ce qui oblige à renuméroter et à baliser à la main le XML.
Y a-t-il une solution ?
Merci pour la réponse. À bientôt.
Daniel
Bonjour.
Script parfait, mais on perd la numérotation des notes et l’appel de note dans le texte.
Ce qui oblige à renuméroter et à baliser à la main le XML.
Y a-t-il une solution ?
Merci pour la réponse. À bientôt.
Daniel
+1
N'est ce pas plus simple de faire une note de bas de page sous word et de copier coller dans son adminstration de blog/site?