Spaziatura errata con XeLatex e poliglossia
Ho un documento Latex multilingue che utilizza Xelatex e il fontspec
pacchetto per il rendering. Il mio documento renderizzato mostra una spaziatura insoddisfacente soprattutto in inglese: spesso lo spazio bianco dopo la punteggiatura di qualsiasi tipo è troppo ampio. Non ho mai avuto questo problema prima, e quindi mi chiedo se mi sono arrabbiato o se qualcosa è cambiato con alcuni aggiornamenti del pacchetto: Ecco un esempio:

Colpisce abbastanza l'occhio che non ci sia alcuna sillabazione in corso. Ma questa potrebbe essere solo una coincidenza, poiché più avanti nel documento ci sono casi di sillabazione, ma non molti. I miei risultati in tedesco sono migliori. Qualcuno può aiutarmi qui per favore.
Ecco un esempio di codice:
\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}
Risposte
Come dice David Carlisle nei commenti, questo è il comportamento previsto: per impostazione predefinita TeX lascia uno spazio leggermente più grande dopo la punteggiatura di fine frase che tra le parole. Questo comportamento è conosciuto dal comando TeX \nonfrenchspacing
.
Anche se questo è comune (o almeno non del tutto raro) nella tipografia inglese (anche se deduco che ci sia un dibattito sul fatto che sia o meno una buona idea lasciare uno spazio più ampio dopo periodi e simili), di solito non viene fatto in altri le lingue. Per quelle situazioni TeX ha il comando \frenchspacing
, che fa sì che lo spazio dopo la punteggiatura diventi lo stesso degli spazi tra le parole.
Quindi diresti \frenchspacing
di contrastare questo comportamento se lo vedi.
Quando sono coinvolti pacchetti di localizzazione come babel
e polyglossia
, questi pacchetti possono cambiare lo stato \frenchspacing
/ \nonfrenchspacing
se le lingue vengono cambiate secondo le convenzioni nazionali.
Con una versione moderna di polyglossia
c'è un modo per disabilitare completamente \nonfrenchspacing
e forzare \frenchspacing
in ogni momento: basta ridefinire la macro interna \polyglossia@lang@frenchspacing:n
che imposta \(non)frenchspacing
sempre l'emissione \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}
Ma ci sono alternative a questo approccio, ad esempio la poliglossia: come impostare `\ frenchspacing` per tutte le lingue, ovunque? .
Un'altra alternativa molto radicale (che probabilmente ha il potenziale per rompere le cose) sarebbe
\def\nonfrenchspacing{\frenchspacing}
\AtBeginDocument{\frenchspacing}