我有一个多语言的 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}