Que signifie l’erreur : « Improper \hyphenation will be flushed » ?#

  • Message : Improper \hyphenation

  • Origine :

Lorsque vous souhaitez spécifier une exception de coupure avec \hyphenation, il faut s’assurer que l’argument ne contient que des lettres, et des traits d’union (-) pour indiquer les points de coupure. Ceci, sous peine d’obtenir le message suivant en :

! Improper \hyphenation will be flushed.
\leavevmode ->\unhbox
                      \voidb@x
<*> \hyphenation{Ji-m\'e
                        -nez}

Il dispsoe d’un équivalent en :

! Improper \hyphenation will be flushed.
\'#1->{
       \accent 19 #1}
<*> \hyphenation{Ji-m\'e
                        -nez}

Comme mentionné dans la question « Pourquoi la césure ne fonctionne pas ? », les « mots » contenant un commande de type \⟨accent⟩ ne peuvent pas être coupés en fin de ligne. Par conséquent, tout mot de ce type est considéré comme incorrect dans une commande \hyphenation{}. Le problème est que les caractères accentués sont des glyphes dans certaines fontes (ils sont alors permis) mais d’autres codages de fontes produisent des constructions complexes exigeant la primitive \accent. Par exemple, si vous utilisez l’encodage T1, \"u est un glyphe unique. Ainsi, le cas suivant sera valide :

\usepackage[T1]{fontenc}
\hyphenation{T\"ur-stop-per}

La même exception de coupure utilisée avec le codage par défaut OT1 aurait produit cette erreur.

La solution au problème consiste donc à utiliser une police de caractères qui contient le caractère accentué ; ainsi l’accent est « caché » aux mécanismes de césure et tout se passe bien.

Pour les utilisateurs de c’est très facile : il suffit d’utiliser \usepackage[T1]{fontenc}, et les commandes de lettres accentuées telles que le \'e dans \hyphenation{Ji-m\'e-nez} deviennent automatiquement un seul caractère accentué avant que ne se déclenche l’algorithme de coupure de mots.

Le Companion, en page 463, donne une explication des différences de caractères dans les codages principaux.


Sources