Mal espaciado con XeLatex y poliglosia

Aug 20 2020

Tengo un documento de Latex multilingüe que usa Xelatex y el fontspecpaquete para renderizar. Mi documento renderizado muestra un espaciado insatisfactorio, especialmente en inglés: a menudo, el espacio en blanco después de cualquier tipo de puntuación es demasiado ancho. Nunca tuve este problema antes y, por lo tanto, me pregunto si me enojé o si algo ha cambiado con algunas actualizaciones del paquete: Aquí hay un ejemplo:

Llama la atención que no haya ningún guión. Pero esto puede ser solo una coincidencia, ya que más adelante en el documento hay casos de separación por guiones, pero no muchos. Mis resultados en alemán son mejores. ¿Alguien puede ayudarme aquí por favor?

Aquí hay un ejemplo de código:

\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}

Respuestas

1 moewe Aug 20 2020 at 23:07

Como dice David Carlisle en los comentarios, este es el comportamiento esperado: De forma predeterminada, TeX deja un espacio un poco más grande después de la puntuación al final de la oración que entre las palabras. Este comportamiento es conocido por el comando TeX \nonfrenchspacing.

Si bien esto es común (o al menos no completamente infrecuente) en la tipografía inglesa (aunque tengo entendido que existe un debate sobre si es una buena idea dejar un espacio más grande después de períodos y similares), generalmente no se hace en otros Idiomas Para esas situaciones, TeX tiene el comando \frenchspacing, que hace que el espacio después de la puntuación sea lo mismo que los espacios entre palabras.

Entonces diría \frenchspacingque contrarreste este comportamiento si lo ve.


Cuando a los paquetes de localización les gusta babely polyglossiaestán involucrados, esos paquetes pueden cambiar el estado \frenchspacing/ \nonfrenchspacingsi los idiomas se cambian de acuerdo con las convenciones nacionales.

Con una versión moderna de, polyglossiahay una forma de deshabilitar \nonfrenchspacingy forzar completamente \frenchspacingen todo momento: simplemente redefina la macro interna \polyglossia@lang@frenchspacing:nque configura \(non)frenchspacingpara emitir siempre \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}

Pero hay alternativas a este enfoque, por ejemplo, poliglosia: ¿cómo configurar `\ frenchspacing` para todos los idiomas, en todas partes? .

Otra alternativa muy radical (que probablemente tiene el potencial de romper cosas) sería

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