Polyglossia et XeLaTeX 3.14159265-2.6-0.99996 (TeXLive 2016)

, par Maïeul

TeXLive 2016 est sortie lundi dernier. Elle inclut une nouvelle version de XeLaTeX qui nécessite quelques adaptations de polyglossia, lesquelles n’ont pas encore été faites.
Heureusement, ceci se corrige en quelques lignes

Le problème

XeTeX propose de définir des classes de caractères (par exemple « signes de ponctuations » « espaces » « guillemets »). Ceci permet d’insérer automatiquement des espaces de tailles déterminées entre certains caractères, selon la classe à laquelle ils appartiennent. Par exemple insérer une espace fine avant les caractères de ponctuation double.

Problème : il existe une classe spéciale, celles correspondant à la limite d’un mot, dont le code était 255 dans les anciennes versions de XeTeX, mais qui dans la version distribuée dans TeXLive2016 est devenue 4095.

Résultat : alors que un mot ; un autre mot mettait une espace fine avant le point-virgule, elle met désormais une espace normale.

La solution

Il suffit simplement de patcher la commande french@punctuation.
Ajoutez donc les lignes suivantes dans votre préambule, après avoir chargé le français :

\makeatletter
\appto\french@punctuation{%
      \XeTeXinterchartoks \french@punctguillstart 255 = {\nobreakspace\xpg@nospace}% "«  " -> "«~"
      \XeTeXinterchartoks 255 \french@punctguillend = {\xpg@unskip\nobreakspace}% "  »" -> "~»"  
      \XeTeXinterchartoks \french@punctguillstart 4095 = {\nobreakspace\xpg@nospace}% "«  " -> "«~"
      \XeTeXinterchartoks 4095 \french@punctguillend = {\xpg@unskip\nobreakspace}% "  »" -> "~»"
      \XeTeXinterchartoks 4095 \french@punctthin = {\xpg@unskip\nobreak\thinspace}%
      \XeTeXinterchartoks 4095 \french@punctthick = {\xpg@unskip\nobreakspace}%  
}
\makeatother

On retrouve le \makeatletter, \makeatother pour manipuler les commandes contenant des @ dans leur nom. Nous ajouter à la fin de la commande \french@punctuation la déclaration des « tokens » (éléments TeX de base) à ajouter entre les caractéres, en utilisant le bon code de classe.

Ceci inclut la correction pour le bug sur les guillemets signalée il y a peu.