\@clubpenalty 泄露

\@clubpenalty 泄露

在以下示例中,的值\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被保存。

相关内容