页数与字符数的单调性

页数与字符数的单调性

我经常为有页数上限的会议准备论文。我花了很多时间思考要删除哪些单词和字符才能使论文符合页数限制。

最近,我遇到了一个有趣而又自相矛盾的现象:我删除了一些单词,页数却增加了!举个例子:我有一篇两栏的论文。我从第 1 页第 2 栏的顶部删除了两个单词。结果,LaTeX 会从第 1 栏中取出最后一行并将其放在第 2 栏的顶部。现在,第 2 栏的最后一行被推到第 2 页,依此类推,这会导致页面溢出。

由于这种行为对我来说没有多大意义,因此很难创建一个最小的工作示例。因此,在我花时间创建 MWE 之前,我很高兴知道这种行为是否已知。

答案1

例如,有一个段落有四行,两行位于 A 列底部,两行位于下一列 B 顶部。然后,删除一个或多个单词,结果 TeX 将段落分成三行而不是四行。

该文件已设置\clubpenalty\widowpenalty10000,以防止孤儿寡母(在段落的第一行之后或最后一行之前分页)。结果是 TeX 无法拆分三行的段落。

如果 A 列没有足够的空间(很可能),那么 LaTeX 必须将段落移至 B 列。在删除某些单词之前,B 列有两行,现在 B 列占据了整个段落,有三行。额外的行现在会导致增加一页,因为每次分页时,内容都会移至下一页。

答案2

这是解决这个问题的一个非常简单的方法。(是的,我也记得我经历过类似的事情。)这个脆弱的代码标记了 TeX 认为“不好”的段落。

\documentclass[twocolumn]{article}
\usepackage{lipsum}
\newcounter{Pars}
\let\oldpar\par
\def\par{\stepcounter{Pars}%
\ifnum\badness<5000%
\typeout{paragraph \thePars good}%
\else%
\typeout{paragraph \thePars bad}%
\marginpar{\vspace*{-\baselineskip}$\uparrow$}\relax%\vspace*{-\baselineskip}\makebox[0pt][l]{\color{red}$\uparrow$\color{black}}\relax%
\fi
\oldpar}
\begin{document}
\lipsum[1]

\lipsum[2]

\lipsum[3]

\lipsum[4]

\lipsum[5]

\lipsum[6]

\lipsum[7-20]
\end{document}

我要强调的是,我不是专家,希望不会造成任何重大伤害。然而,这段代码似乎确实识别出了一些“有问题”的段落。当然,人们可以调整阈值或\badness用其他措施替换。而且,正如 Heiko 所解释的那样,如果在其他地方做出改变,有问题的位置当然可能会发生变化。尽管如此,我希望这段代码可以帮助您更有效地识别值得修改的位置。

相关内容