Bonjour, la liste !
Apparemment, il n’existe à ce jour aucune extension traitant la question
que je vais aborder. Quelqu’un serait-il intéressé par essayer
d’apporter une solution au problème suivant pour LuaLaTeX ?
Il s’agirait d’améliorer le coupure (ou division) des mots en LuaLaTex.
La coupure des mots est nécessaire à l’obtention d’un bon gris
typographique. Elle n’en produit pas moins une légère dégradation du
confort de lecture. J’estime qu’idéalement elle devrait intervenir le
plus tard possible dans un mot, afin de permettre au lecteur d’en
deviner facilement la suite. Au moins, elle devrait éviter l’écueil
inesthétique qui consisterait à avoir un long mot coupé après seulement
quelques lettres, par exemple « sys-/tématisations ». Je pense aussi aux
chaînes commençant par « l’ », « s’ », « t’ » ou « n’ », soit deux
premiers glyphes de chasse réduite qui donneront souvent lieu à des
coupures inesthétiques du genre « l’in-/temporalité », « t’es/péreraient ».
Classiquement, on définit \lefthyphenmin et \righthyphenmin pour
s’assurer d’un nombre minimum de lettres avant et après la division,
avec \lefthyphenmin souvent fixé à 3. Voilà qui convient bien pour des
mots courts comme « persil », « tendresse », mais qui pourrait donner
lieu à des coupures inesthétiques comme « ten-/taculairement »,
« per-/sonnalisations ». On pourrait bien sûr augmenter la valeur de
\lefthyphenmin, mais cela présenterait l’inconvénient majeur d’interdire
la division de mots courts, cruciale pour obtenir un bon gris
typographique dans les justifications étroites à moyennes (lignes de 40
à 60 caractères).
Pourquoi ne pas le faire manuellement en fonction de la justification du
document ? Parce qu’un document peut comporter plusieurs justifications
(au moins en nombre moyen de caractères par ligne) : celle des alinéas
ordinaires du texte courant ; celle des notes de bas de page ; celle des
notes marginales ; celle des citations isolées dans le texte courant ;
celle des épigraphes ; celle des encadrés… Par ailleurs, même dans de
justifications plus importantes comme 60 à 70 caractères, les alinéas
courts de deux ou trois lignes peuvent donner lieu à des situations
désespérées imposant des divisions laxistes dans le but de ne pas
dégrader excessivement le gris typographique.
En somme, l’idée serait en quelque sorte de faire varier de manière
dynamique, en fonction à la fois de la longueur du mot à couper et de la
justification de l’alinéa en cours de composition, les valeurs de
\lefthyphenmin (surtout) et de \righthyphenmin, ou de ce qui pourrait
servir d’équivalent en LuaLaTeX.
Cependant, compter le nombre de glyphes n’est pas idéal. Pour des
raisons esthétiques, c’est l’encombrement horizontal du mot qui devrait
être pris en compte. Or, certains glyphes chassent plus que d’autres (un
« m » est bien plus large qu’un « l », par exemple). L’idée serait donc,
autant que possible, de ne pas couper un mot avant la moitié de celui-ci
ni après les quatre cinquièmes (pour éviter par exemple
« réindustriali-sas ») en se basant si possible sur la chasse du mot
plutôt que sur le nombre de caractères.
Je me suis dit que ce devait être possible en LuaLaTeX avec les
callbacks (tout en tenant compte de babel-french), mais je suis très
loin d’avoir les compétences requises. Aussi ai-je mis Claude, Grok et
Gemini sur le coup, mais aucune de ces IA n’a su produire un code
efficace (la faute m’en incombant sans doute en partie, dans la mesure
où la formulation des requêtes à ces IA n’est pas mon fort).
Histoire de compliquer un peu l’algorithme, il s’agirait par ailleurs
d’alléger les contraintes définies, voire carrément d’éviter d’appliquer
ce traitement s’il devait résulter de la coupure du mot une trop grande
dégradation du gris typographique : lignes lavées (underfull box),
composition trop contrastée d’une ligne à l’autre (une ligne un peu
lâche suivant une ligne un peu serrée)… Des valeurs « en dur »
prévaudraient alors (\lefthyphenmin et \righthyphenmin, ou équivalent).
Le graal ? Une extension qui ferait tout cela, personnalisable,
fonctionnant à la fois avec babel et polyglossia.
Le comportement que j’ai en tête :
— compatibilité avec babel et polyglossia ;
— priorité aux coupures manuelles - au fil du texte (parfois
indispensables dans des situations désespérées) et à celles déclarées en
préambule avec \hyphenation ;
— coupure le plus tard possible en tenant compte de la longueur minimale
imposée après la division (ou à défaut du nombre minimum de caractères,
\righthyphenmin ou équivalent) ;
— coupure au plus tôt après 40 % de la longueur du mot ;
— allègement de ces contraintes en proportion inverse de la longueur des
lignes de l’alinéa en cours de composition ;
— personnalisation des contraintes en fonction du niveau d’exigence ou
des goûts de l’utilisateur.
J’ai essayé de concevoir au mieux le problème et les réponses à y
apporter, mais certains points ont évidemment très bien pu m’échapper,
qu’il serait souhaitable d’envisager avant toute tentative de traiter
techniquement la question.
Merci pour votre attention.
–
Thomas Savary
Du cœur à l’ouvrage