Spaziatura errata con XeLatex e poliglossia

Aug 20 2020

Ho un documento Latex multilingue che utilizza Xelatex e il fontspecpacchetto 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

1 moewe Aug 20 2020 at 23:07

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 \frenchspacingdi contrastare questo comportamento se lo vedi.


Quando sono coinvolti pacchetti di localizzazione come babele polyglossia, questi pacchetti possono cambiare lo stato \frenchspacing/ \nonfrenchspacingse le lingue vengono cambiate secondo le convenzioni nazionali.

Con una versione moderna di polyglossiac'è un modo per disabilitare completamente \nonfrenchspacinge forzare \frenchspacingin ogni momento: basta ridefinire la macro interna \polyglossia@lang@frenchspacing:nche imposta \(non)frenchspacingsempre 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}