Mauvais espacement avec XeLatex et polyglossia

Aug 20 2020

J'ai un document Latex multilingue qui utilise Xelatex et le fontspecpackage pour le rendu. Mon document rendu montre un espacement insatisfaisant, surtout en anglais: Souvent, l'espace blanc après la ponctuation de toute sorte est beaucoup trop large. Je n'ai jamais eu ce problème auparavant, et je me demande donc si je me suis énervé ou si quelque chose a changé avec certaines mises à jour de package: Voici un exemple:

Il est assez frappant de constater qu'il n'y a pas de césure. Mais ce n'est peut-être qu'une coïncidence, car plus loin dans le document, il y a des cas de césure, mais pas beaucoup. Mes résultats en allemand sont meilleurs. Quelqu'un peut-il m'aider ici s'il vous plaît.

Voici un exemple de code:

\documentclass[a4paper,10pt,twoside]{memoir}

\usepackage{polyglossia} 

\usepackage{xltxtra}
\usepackage{fontspec}

\setmainlanguage[spelling=old,babelshorthands=true,script=latin]{german}
\setotherlanguage[variant=polytonic]{greek}{}
\setotherlanguages{english, french, italian, spanish, latin, portuguese}

\usepackage{blindtext}

\begin{document}

\blinddocument
\begin{english}
\blinddocument
\end{english}
\end{document}

Réponses

1 moewe Aug 20 2020 at 23:07

Comme le dit David Carlisle dans les commentaires, c'est un comportement attendu: Par défaut, TeX laisse un espace légèrement plus grand après la ponctuation de fin de phrase qu'entre les mots. Ce comportement est connu par la commande TeX \nonfrenchspacing.

Bien que cela soit courant (ou du moins pas tout à fait rare) dans la typographie anglaise (bien que je suppose qu'il y a un débat sur la question de savoir si c'est une bonne idée de laisser un espace plus grand après les périodes et autres), cela n'est généralement pas fait dans d'autres langues. Pour ces situations, TeX a la commande \frenchspacing, qui fait que l'espace après la ponctuation devient le même que les espaces inter-mots.

Vous diriez donc \frenchspacingde contrer ce comportement si vous le voyez.


Lorsque des packages de localisation comme babelet polyglossiasont impliqués, ces packages peuvent changer l' état \frenchspacing/ \nonfrenchspacingsi les langues sont commutées conformément aux conventions nationales.

Avec une version moderne de, polyglossiail existe un moyen de désactiver \nonfrenchspacinget de forcer complètement \frenchspacingà tout moment: il suffit de redéfinir la macro interne \polyglossia@lang@frenchspacing:nqui définit \(non)frenchspacingtoujours l'émission \frenchspacing.

\documentclass[a4paper,10pt,twoside]{memoir}

\usepackage{polyglossia}
\usepackage{fontspec}

\makeatletter
\ExplSyntaxOn
\cs_set_nopar:Nn{\polyglossia@lang@frenchspacing:n}{\frenchspacing}
\ExplSyntaxOff
\makeatother

\setmainlanguage[spelling=old,babelshorthands=true,script=latin]{german}
\setotherlanguage[variant=polytonic]{greek}{}
\setotherlanguages{english, french, italian, spanish, latin, portuguese}

\usepackage{blindtext}

\begin{document}

\blinddocument
\begin{english}
\blinddocument
\end{english}
\end{document}

Mais il existe des alternatives à cette approche, par exemple la polyglossie: comment définir `\ frenchspacing` pour toutes les langues, partout? .

Une autre alternative très radicale (qui a probablement le potentiel de casser des choses) serait

\def\nonfrenchspacing{\frenchspacing}
\AtBeginDocument{\frenchspacing}