当我加载以意大利语为默认语言的 polyglossia 时,我遇到了问题。\clubpenalty = 10000 \widowpenalty = 10000 \displaywidowpenalty = 10000 不阻止孤儿和寡妇。当我加载德语或英语作为默认语言时,问题消失。我还使用 \setspace 包,我怀疑这可能会导致问题。但我不知道为什么。
在这个小例子中,问题出现在第 8 页末尾的 oprhan 行。
\documentclass[a4paper,twoside,10pt,openany]{book}
\usepackage[no-math]{fontspec}
\usepackage{setspace}
\setstretch{1,1}
\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage{italian}
\setmainfont[Mapping=tex-text]{Linux Libertine}
\usepackage{lipsum}
\setlipsumdefault{1-55}
\clubpenalty = 10000
\widowpenalty = 10000
\displaywidowpenalty = 10000
\raggedbottom{}
\begin{document}
\lipsum{}
\end{document}
答案1
在我看来,使用book
with\raggedbottom
不是一个好的选择。
此外,使用无限惩罚来避免出现棍状线和寡妇线的做法应该保留给自动排版,因为在自动排版中您没有时间或可能性仔细检查每一页。
无论如何,您可以修补语言选择命令来获得您想要的内容。
\documentclass[a4paper,twoside,10pt,openany]{book}
\usepackage[no-math]{fontspec}
\usepackage{setspace}
\setstretch{1,1}
\usepackage{polyglossia}
\setdefaultlanguage{italian}
\setmainfont{Linux Libertine O}
\makeatletter
\patchcmd\blockextras@italian{3000}{10000}{}{}
\patchcmd\blockextras@italian{3000}{10000}{}{}
\patchcmd\blockextras@italian{3000}{10000}{}{}
\makeatother
\usepackage{lipsum}
\setlipsumdefault{1-55}
\raggedbottom
\begin{document}
\lipsum{}
\end{document}
不加载xltxtra
:它不会添加任何有用的内容。也Mapping=tex-text
应该是Ligatures=TeX
,但可以省略,因为它是默认的。