XeLatex 和 polyglossia 的间距不好

XeLatex 和 polyglossia 的间距不好

我有一个多语言的 Latex 文档,它使用 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

作为大卫·卡莱尔评论中说,这是预期的行为:默认情况下,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}

但这种方法还有其他选择,例如polyglossia:如何为所有地方的所有语言设置“\frenchspacing”?

另一个非常激进的替代方案(可能会破坏一些东西)是

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

相关内容