在以下示例中,的值\clubpenalty
已被重置为\@clubpenalty
第二页上的值:
\documentclass[]{book}
\usepackage{lipsum}
\begin{document}
\subsection{abc}
blblb
\clubpenalty=10000
\showthe\clubpenalty
\lipsum
\showthe\clubpenalty
\end{document}
这是一个错误吗?可以避免吗?(我明确地想只为文档的一小部分设置更大的 \clubpenalty)。
答案1
为了避免章节标题和后续文本之间出现分页符,LaTeX 会临时设置一些参数。它还会\clubpenalty
在章节标题后的段落中将其设置为 10000;这是通过 完成的\everypar
,它将包含类似于
\clubpenalty10000 \everypar{\clubpenalty=\@clubpenalty \everypar{}}
因此下一个段落(标题后的第二个段落),值恢复为标准值。
因此,您需要暂时更改\clubpenalty
为 9000 的是
\@clubpenalty=9000
\clubpenalty=\@clubpenalty
也就是说,你需要设置两个都参数设置为所需值。
设置\clubpenalty=\@clubpenalty
在开始文档时完成,以所需的值启动。你永远不能\clubpenalty
单独依赖它,因为它可能排版时发生改变。
举个例子:babel-italian
模块将俱乐部罚款设置为 3000;它这样做
\addto\extrasitalian{%
\babel@savevariable\clubpenalty
\babel@savevariable\widowpenalty
\babel@savevariable\@clubpenalty
\clubpenalty3000\widowpenalty3000\@clubpenalty\clubpenalty}%
因此,当语言发生变化时,这些值会被保存,以便在下次语言变化时恢复。请注意,和\clubpenalty
都会\@clubpenalty
被保存。