Mal espaciado con XeLatex y poliglosia
Tengo un documento de Latex multilingüe que usa Xelatex y el fontspec
paquete 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
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 \frenchspacing
que contrarreste este comportamiento si lo ve.
Cuando a los paquetes de localización les gusta babel
y polyglossia
están involucrados, esos paquetes pueden cambiar el estado \frenchspacing
/ \nonfrenchspacing
si los idiomas se cambian de acuerdo con las convenciones nacionales.
Con una versión moderna de, polyglossia
hay una forma de deshabilitar \nonfrenchspacing
y forzar completamente \frenchspacing
en todo momento: simplemente redefina la macro interna \polyglossia@lang@frenchspacing:n
que configura \(non)frenchspacing
para 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}