Плохой интервал с XeLatex и полиглоссией

Aug 20 2020

У меня есть многоязычный латексный документ, который использует Xelatex и fontspecпакет для рендеринга. В моем визуализированном документе наблюдается неудовлетворительный интервал, особенно на английском языке: часто пробелы после любого вида пунктуации слишком широки. У меня никогда раньше не было этой проблемы, и поэтому я спрашиваю себя, рассердился ли я или что-то изменилось с некоторыми обновлениями пакетов: Вот пример:

Бросается в глаза, что никаких переносов не происходит. Но это может быть просто совпадением, так как далее в документе будут случаи расстановки переносов, но их не так много. Мои результаты по немецкому лучше. Кто-нибудь может мне помочь, пожалуйста.

Вот пример кода:

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

Ответы

1 moewe Aug 20 2020 at 23:07

Как говорит Дэвид Карлайл в комментариях, это ожидаемое поведение: по умолчанию TeX оставляет немного больше места после знаков препинания в конце предложения, чем между словами. Такое поведение известно по команде TeX \nonfrenchspacing.

Хотя это обычное явление (или, по крайней мере, не совсем редкость) в английской типографике (хотя, как я понимаю, ведутся споры о том, стоит ли оставлять большее пространство после точек и т.п.), в других типах этого обычно не делается. языков. Для таких ситуаций в TeX есть команда \frenchspacing, которая заставляет пробелы после знаков препинания совпадать с пробелами между словами.

Итак, вы бы сказали, что \frenchspacingнужно противостоять такому поведению, если вы его видите.


Когда используются пакеты локализации, такие как babelи polyglossia, эти пакеты могут изменить состояние \frenchspacing/, \nonfrenchspacingесли языки переключаются в соответствии с национальными соглашениями.

В современной версии polyglossiaесть способ полностью отключить \nonfrenchspacingи принудительно \frenchspacingв любое время: просто переопределите внутренний макрос, \polyglossia@lang@frenchspacing:nкоторый устанавливает \(non)frenchspacingпостоянную выдачу \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}

Но есть альтернативы этому подходу, например, полиглоссия: как установить \ frenchspacing для всех языков, везде? .

Другой очень радикальной альтернативой (которая, вероятно, может что-то сломать) было бы

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