Плохой интервал с XeLatex и полиглоссией
У меня есть многоязычный латексный документ, который использует 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}
Ответы
Как говорит Дэвид Карлайл в комментариях, это ожидаемое поведение: по умолчанию 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}