En rouge, deux mots orphelins en fin de paragraphe.

La capture ci-dessus fixe la situation initiale de cet exercice. On aperçoit en rouge les mots orphelins de la composition courante. (En vérité, ce ne sont pas des orphelins au sens strict, il faudrait plutôt les appeler « orphelins de paragraphe ».) Dans un premier réflexe, on se verrait bien appliquer une espace insécable justifiante avant chacun de ces mots, ou bien user de l'option « Sans retour automatique » pour solidariser les termes à la fin du paragraphe.

L'espace insécable est une mauvaise option, car cela consisterait à ajouter un caractère que le texte ne requiert pas sur un plan strictement typographique. Après tout, le traitement des orphelins de paragraphe n'est qu'un choix esthétique — un choix humanitaire — dont on ne saurait faire peser la subjectivité sur nos confrères.

Ainsi, le maquettiste responsable doit rechercher une issue par stylisation (des paragraphes et/ou des caractères). Comme chacun sait, InDesign propose parmi ses « Options d'enchaînement » (niveau paragraphe) tous les outils pour conjurer les lignes veuves et orphelines. Accessoirement, les « Paramètres de la césure » permettent de proscrire la division d'un mot entre deux colonnes (« Césure sur la colonne ») ainsi que la division du dernier mot d'un paragraphe (« Couper le dernier mot »). Toutefois, aucun paramètre n'est offert pour augmenter la solidarité des mots à la fin d'un paragraphe.

Le style NO_WRAP

C'est le paramètre « Sans retour automatique », évoqué plus haut, qui va nous tirer d'affaire. Comme il s'agit d'un attribut de caractère, il peut intervenir isolément dans la formation d'un style de caractère. Par ailleurs, tout caractère porteur de cet attribut interdit le retour à la ligne à son emplacement. Ainsi, un simple caractère d'espace se comportera comme insécable si nous l'étiquetons « Sans retour automatique ».

Voyons où cela nous mène. Créons sans plus tarder un style de caractère, NO_WRAP, dont la seule fonction sera d'activer l'attribut « Sans retour automatique » :

NO_WRAP, un style de caractère « Sans retour automatique ».

A priori, NO_WRAP ne sert pas à grand-chose, mais supposez juste une seconde que nous parvenions à l'appliquer automatiquement à tout espace précédant un mot orphelin...

Appliquer NO_WRAP par un Style Grep

Pour voir, considérons maintenant le style de paragraphe utilisé dans notre composition principale (chez moi, il s'appelle LABEUR). Afin de bien décomposer les mouvements, dupliquons-le (sélection + « Créer un nouveau style »), puis nommons son duplicata LABEUR_SansOrphelin.

Éditons LABEUR_SansOrphelin (double-clic). La seule spécialisation que nous allons lui apporter par rapport à LABEUR est une règle de « Style Grep ». (Si votre style de travail comporte déjà d'autres instructions Grep, je vous laisse juge de la priorité à appliquer vis-à-vis des autres règles.)

Application du style NO_WRAP par expression régulière (Style Grep).

L'expression régulière que nous utilisons ci-dessus — " (?=[^ ]+$)" (sans les guillemets) — fait appel au lookahead positif, elle sélectionne un caractère d'espace sous réserve qu'il soit suivi d'une séquence de la forme "[^ ]+$", c'est-à-dire d'une suite de caractères sans espace concluant un paragraphe ou un article. En clair, notre regex met en joue toute espace située avant le dernier mot. Le mécanisme des Styles Grep permet alors de lui affecter le style NO_WRAP, ce qui rend artificiellement cette espace insécable.

À noter que j'ai délibérément ignoré dans ce traitement les espaces spéciales (fines, ultra-fines, etc.), lesquelles seront donc considérées comme des caractères déjà rattachés et ne devant être pris en compte dans la détection des mots orphelins. Ainsi, l'espace fine située avant un point d'interrogation final ne vaudra pas comme caractère de séparation.

Il n'y a plus qu'à appliquer à notre texte le style LABEUR_SansOrphelin, à la place de LABEUR. Le résultat est immédiat et ne nécessitera plus aucun retraitement manuel :

Traitement automatique des mots orphelins dans InDesign.

NB. — Klaus Nordby m'a invité à réfléchir à un problème similaire portant sur les caractères singletons isolés en fin de ligne. Faut-il parler de « veufs de ligne » ? Quoi qu'il en soit, une solution analogue peut être mise en œuvre pour les rattacher à la ligne à suivre. On appliquera par exemple le style NO_WRAP sur la regex :
"\<\w " (sans les guillemets).