abracadabraGREP : appliquer exposant aux siècles

GREP pour InDesign : appliquer exposant aux siècles en chiffres romains

 

Nous allons étudier une requête GREP pour InDesign destinée à appliquer l’attribut Exposant aux siècles écrits en chiffres romains, car chacun sait qu’en français les siècles s’écrivent en chiffres romains : Ier, Ve, VIIIe, Xe, XIVe, XXIe, etc. C’est-à-dire en utilisant des lettres capitales, ou plus exactement des lettres en petites capitales. C’est pourquoi notre requête doit également détecter et capter les lettres minuscules.*
Bien entendu, cette requête vaut aussi pour les numéros d’arrondissements et pour tout ce qui s’écrit en chiffres romains.

L’avantage avec les chiffres romains c’est qu’ils utilisent peu de caractères différents, ça nous simplifie la tâche puisque les trois lettres « X, I et V » suffisent à les exprimer de -XXXXVIII à +XXXXVIII. Ça nous offre une fourchette de 96 siècles, utilisable pour les 69 siècles passés et pour les 27 siècles à venir. Si on a besoin d’une fourchette plus large il faudra inclure le « L » dans la requête, et ensuite le « C » et le « M », mais avec tous les dangers que ça représente pour les articles « le », « ce », « me », etc.
À noter qu’il n’y a pas de zéro en chiffres romains, et comme les choses sont bien faites il n’y a pas non plus de siècle zéro.

De même que pour les ordinaux en chiffres arabes, il est inutile de me demander de mettre des « èmes » ou des « ièmes » en exposant car chacun sait (sauf l’Éducation Nationale) que ce n’est pas typographiquement correct. C’est une des fautes les plus répandues mais en français les abréviations obéissent à des règles, comme tout le reste.

Ceci étant, la présence de « èmes » ou de « ièmes » dans un texte n’est pas un problème insurmontable, on en viendra facilement à bout avec le Rechercher-remplacer. Il en a été question dans un précédent article car là aussi le GREP peut faire gagner beaucoup de temps.

 

Rechercher :

(?i)\<(X|I|V)+\K(er|e)s?\>

 

Explications :

 

(?i) : par défaut GREP est sensible à la casse, placer cette instruction en début de requête désactive cette « sensibilité ».

\< : signifie « début de mot ».

(X|I|V) : les parenthèses indiquent une expression, la barre, ou pipe en anglais, indique le « ou ». Ici on recherche le « X » ou le « I » ou le « V ».

+ :  signifie « présent une ou plusieurs fois ».

\K : (non documenté) signifie qu’on ne capte que les caractères situés après « \K » (à droite), si et seulement si les caractères recherchés immédiatement avant « \K » (à gauche) sont présents. C’est un peu l’équivalent du « look behind positif » que nous avons étudié dans des articles précédents, mais sans ses limites. En effet, le « look behind positif » ne permet pas d’utiliser la répétition (le « + ») qui est ici absolument nécessaire.

(er|e) : les parenthèses indiquent une expression, la barre, ou pipe en anglais, indique le « ou ». Ici on recherche « er » ou « e », contrairement aux ordinaux en chiffres arabes on n’a pas besoin de rechercher « re » puisque siècle est un nom masculin.

s : on recherche un « s ».

? : signifie « présent zéro ou une fois », ce point d’interrogation rend la présence du « s » facultative. Je ne suis pas certain de pouvoir trouver un cas de figure pour lequel la détection d’un « s » éventuel en fin de mot serait vraiment utile puisqu’à priori chaque siècle est unique et donc singulier, mais comme je ne suis pas non plus certain du contraire je ne vois aucune raison de ne pas le faire…

\> : signifie « fin de mot », c’est-à-dire qu’il doit être suivi d’une espace, d’une fin de paragraphe, d’un saut de ligne, d’une ponctuation, etc.

 

On recherche donc, en capitale ou en minuscule, placé en début de mot, un « X » ou un « I » ou un « V », ou n’importe quelle combinaison de ces trois caractères répétés une ou plusieurs fois, suivi de « er » ou d’un « e », éventuellement suivi d’un « s », placé en fin de mot.

Mais seuls les caractères situés après « \K » seront sélectionnés par la requête, caractères auxquels on appliquera un style de caractère Exposant** via le Rechercher-remplacer.

 

Attention

Je déconseille l’usage de cette requête en style GREP car, les chiffres romains étant des lettres comme les autres, elle risque de capter quelques faux-positifs. Le mot « vie », par exemple, est un candidat sérieux car rien ne le distingue de VIe, que se soit en capitales ou en minuscules. Et il y en a certainement d’autres.

C’est pour cette raison que je met aussi en garde contre l’utilisation en aveugle du « Tout remplacer », dans certains cas rien ne remplace encore l’œil humain.

application de l'attribut exposant au siècle 1/3
En rouge les siècles en capitales, en cyan les siècles en minuscules, en vert les mots qui doivent rester intacts.
application de l'attribut exposant au siècle 2/3
L’attribut Petites capitales* a été appliqué aux siècles écrits en minuscules.
application de l'attribut exposant au siècle 3/3
L’attribut Exposant OpenType a été appliqué à tous les siècles, qu’ils soient en capitales ou en minuscules.

 

Cet article est ouverts aux commentaires, si jamais vous ne les voyez pas, ou plus, c’est qu’une fois encore les spameurs vendeurs de contrefaçons ou de produits miracles auront eu raison de ma patience.

 

À bientôt pour un autre abracadabraGREP.

 

abracadabraGREP, fenêtre rechercher-remplacer

 

* L’attribut « petites capitales » ne fonctionne que sur les lettres minuscules, pas sur les lettres capitales. L’objet de cet article n’étant pas de faire un cours de typographie, il n’y est pas question de la façon d’appliquer l’attribut « petites capitales » aux siècles écrits en minuscules. Il n’y est pas non plus question de l’astuce qui permet de transformer directement les siècles écrits en capitales par des petites capitales, donc sans remplacement par des minuscules. Je garde ça pour plus tard. 😉

** Style de caractère « Exposant » pour lequel on préférera l’attribut « Exposant OpenType » dans la mesure du possible.

Print Friendly

9 Comments

  1. Amaury

    Il y a des mots en français qui sont captés par cette règle ! Par exemple « vie » et « vive » dans la phrase « La vie vêtue d’un vêtement de couleur vive ! »

  2. Amaury

    Désolé pour le charabia dans mon mail précédent. Je l’ai validé trop vite. Peut-être que le webmaster peut corriger directement ma phrase qui fait tâche sur ce site toujours très bien tenu.

    Il faut lire :

    En réalité, les siècles sont, selon les règles strictes, composés avec des petites capitales (donc avec les lettres x, i ou v en minuscule). Je peux donc vérifier qu’il y ait bien juste après le numéro romain et le « e » en exposant, une espace (en théorie insécable) et le mot siècle. L’expression devient alors :

    Pour l’exposant :
    ([vix]+)\K(e)(?=(\ssiècle))

    Pour les petites capitales :
    ([vix]+)(?=(e\ssiècle))

    Bien sûr, il reste les cas comme « XVIe et XVIIe siècles » à gérer manuellement…

  3. il reste les cas comme « XVIe et XVIIe siècles » à gérer manuellement…

    On peut ajouter « s? » à la fin des requêtes :

    Pour l’exposant :
    ([vix]+)\K(e)(?=(\ssiècles?))

    Pour les petites capitales :
    ([vix]+)(?=(e\ssiècles?))

    Intéressante l’idée de la détection du mot « siècle ».
    Je vais creuser ça…

    1. Amaury

      Toute la difficulté est de capturer « XVIe » dans la phrase « XVIe et XVIIe siècle »…

      Voici un dialogue que j’ai créé pour faire mes tests où figurent plusieurs cas de combinaisons de siècles à capturer :

      — Vive la vie au XXe siècle et au XXIe siècle !
      — Pourquoi simplement aux XXe et XXIe siècles ? La vie n’était-elle pas bien aux XVIe, XVIIe, XVIIIe ou XIXe siècles ?
      — Oui, tu as raison, on peut dire du XVIe au XXIe siècles !

      Les formules suivantes y capturent toutes les occurrences de siècles.

      Pour les exposants :
      ([vix]+)\K(e)(?=(,?\s?(et|ou|au|du)?\s?([vix]+)e)*\ssiècle)

      Pour les petites capitales :
      ([vix]+)(?=e(,?\s?(et|ou|au|du)?\s?([vix]+)e)*\ssiècle)

      Mais il reste un gros problème : le mot vie dans « Vive la vie au XXe siècle » est maintenant également capturé !
      Je n’ai pas trouvé de solution. Néanmoins, je crois que pour des cas comme ceux-ci, une relecture est beaucoup, beaucoup plus simple… et je resterai sur :

      Pour l’exposant :
      ([vix]+)\K(e)(?=(\ssiècle))

      Pour les petites capitales :
      ([vix]+)(?=(e\ssiècle))

  4. Amaury

    Merci du conseil et encore bravo pour la clarté des explications sur le site.

    En complément, pour être certain que les espaces avant « siècle » soient des espaces insécables, j’utilise aussi le GREP suivant :

    Rechercher :
    ([vix]+)(e)\K(\s)(?=(siècle))
    Remplacer par :
    ~S

    Enfin, grâce au plugin Multi-find/Change, il est possible de réaliser ces 3 requêtes en une seule action.

Comments are closed.