当我使用时\flushbottom
,大多数时候我都会得到很好的结果,但为了将最后一行文本与工作表文本区域的底部对齐,Latex 必须拉伸垂直空间的情况并不少见。
考虑下面的例子(下面的 MWE),这种情况故意夸大了只是为了说明问题:
“TEST” 字样前后的垂直间距应在 9 到 11 pt ( \vspace{10pt plus 1pt minus 1pt}
) 之间,但显然不是。间距超出了允许值的范围,并且“TEST” 字样前后有大片空白,我认为这非常不美观。
我知道,为了避免这种情况(不\raggedbottom
用于整个文档),可以使用\enlargethispage
或\looseness
,但这并不总是足够的,而且在审美上也不令人满意。
因此我的问题是:
是否有可能使行为\flushbottom
更加灵活?
更准确地说,是否可以进行修改\flushbottom
以便:
- Latex 尝试将最后一行与页面底部对齐(大多数情况下的默认行为)
- 如果不可能做到这一点(即不尊重垂直粘连的有限值:此处垂直间距在 9 pt 和 11 pt 之间,不多不少),没关系,
\raggedbottom
用于这些特定的页面(实际上\@textbottom{\vskip \z@ \@plus.0001fil}
)。
我对此进行了一些研究,没有发现任何结果,我怀疑它是否可以编程。
分数维:
\documentclass{book}
\usepackage{lipsum}
\usepackage[showframe]{geometry}
\widowpenalties 1 10000 %deliberately exaggerated
\newcommand{\test}{%
\vspace{10pt plus 1pt minus 1pt}
TEST%
\vspace{10pt plus 1pt minus 1pt}
}
\flushbottom
% \raggedbottom
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna. Morbi euismod interdum nisi ut iaculis. Phasellus elementum nisi et augue molestie varius. Praesent bibendum diam at ligula iaculis pharetra. Aliquam sem urna, maximus ac ante vel, finibus dignissim nisi. Quisque massa nisl, commodo ut porta non, placerat molestie dui. Vivamus sit amet purus nunc. Vestibulum viverra pharetra felis quis aliquam. Duis hendrerit laoreet nulla eget tristique. Maecenas ante eros, condimentum nec euismod consequat, venenatis nec dolor. Suspendisse ut dolor sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam mattis nibh porttitor ipsum eleifend fringilla. Sed vulputate efficitur lorem et consectetur. Fusce sollicitudin volutpat elit, in scelerisque enim. Donec porta dictum leo ac condimentum. Pellentesque ac accumsan felis. Sed egestas eleifend turpis non fermentum. Etiam nisi nunc, pellentesque ac nunc a, lobortis lobortis leo. Sed vestibulum, arcu id ullamcorper varius, lacus tortor venenatis mi, ac euismod libero sem eget sem. Mauris quam dolor, cursus et ex et, tincidunt aliquet velit. Curabitur condimentum elementum arcu id efficitur. Phasellus hendrerit nulla nec nibh dictum consequat. Cras eget turpis nulla. Donec metus urna, elementum non turpis vitae, tempus tincidunt libero. Nam augue sapien, venenatis vulputate risus sit amet, scelerisque mollis neque. Nam eu diam libero. Vivamus vestibulum, tellus suscipit vulputate lobortis, dolor nunc dictum est, vel imperdiet nisl dolor in purus. Donec in maximus leo. Phasellus eu sem dapibus, laoreet risus nec, eleifend ex. Sed id laoreet magna. Phasellus sit amet ultricies sem. Phasellus id felis viverra, porttitor enim vitae, accumsan nisi. Aenean ex tortor, elementum a placerat at, vulputate at ligula. Donec sagittis lacus ut elementum venenatis. Aliquam rhoncus feugiat egestas. In dapibus urna sed vulputate accumsan. Duis sit amet metus metus. Ut risus urna, blandit ac diam in, sodales tempus arcu. Nullam sed gravida justo, non auctor ex. Maecenas ac egestas velit, vitae fringilla sem. Cras quis justo orci. In maximus rhoncus lectus, sed tincidunt neque efficitur finibus. In sit amet gravida neque. Mauris egestas nec neque in finibus. Nulla venenatis sagittis mauris, vitae placerat quam scelerisque imperdiet. Nulla ullamcorper sem ut dolor eleifend, in pellentesque justo eleifend. Donec euismod sed leo sed venenatis. Nam vestibulum euismod ante id faucibus. Vestibulum vestibulum enim tortor, a eleifend nisi aliquam nec. Nulla sem ipsum, varius vel volutpat nec, condimentum id diam. Aenean vehicula libero vel turpis tristique, vitae pharetra erat luctus. Sed finibus libero ac velit scelerisque, a hendrerit dui bibendum. Cras in urna dolor. Donec cursus ultricies sapien ut iaculis. Suspendisse iaculis congue nisi, sit amet condimentum nunc venenatis nec. Sed vitae tellus tempus, feugiat purus vitae, aliquam est. Mauris mattis ante vel felis mattis, quis gravida felis facilisis. Sed eu purus quis nunc porttitor euismod. Sed quis efficitur quam. Mauris vulputate massa vitae libero tincidunt, sit amet condimentum tortor dapibus. Ut sed arcu accumsan tellus vehicula tincidunt in nec ante. Mauris in sagittis odio. Curabitur quis turpis ac felis hendrerit tincidunt et eu tortor.
\test
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna. Morbi euismod interdum nisi ut iaculis. Phasellus elementum nisi et augue molestie varius. Praesent bibendum diam at ligula iaculis pharetra. Aliquam sem urna, maximus ac ante vel, finibus dignissim nisi. Quisque massa nisl, commodo ut porta non, placerat molestie dui. Vivamus sit amet purus nunc. Vestibulum viverra pharetra felis quis aliquam. Duis hendrerit laoreet nulla eget tristique. Maecenas ante eros, condimentum nec euismod consequat, venenatis nec dolor. Suspendisse ut dolor sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam mattis nibh porttitor ipsum eleifend fringilla. Sed vulputate efficitur lorem et consectetur. Fusce sollicitudin volutpat elit, in scelerisque enim. Donec porta dictum leo ac condimentum. Pellentesque ac accumsan felis. Sed egestas eleifend turpis non fermentum. Etiam nisi nunc, pellentesque ac nunc a, lobortis lobortis leo. Sed vestibulum, arcu id ullamcorper varius, lacus tortor venenatis mi, ac euismod libero sem eget sem. Mauris quam dolor, cursus et ex et, tincidunt aliquet velit. Curabitur condimentum elementum arcu id efficitur. Phasellus hendrerit nulla nec nibh dictum consequat. Cras eget turpis nulla. Donec metus urna, elementum non turpis vitae, tempus tincidunt libero. Nam augue sapien, venenatis vulputate risus sit amet, scelerisque mollis neque. Nam eu diam libero. Vivamus vestibulum, tellus suscipit vulputate lobortis, dolor nunc dictum est, vel imperdiet nisl dolor in purus.
\end{document}
答案1
\badness
您可以在创建时在输出例程中询问值\pagebody
。如果 badness 大于 100,则拉伸大于plus <something>
规范中允许的数字。
在纯 TeX 中(输出程序很简单),它可以通过以下方式实现:
\def\pagebody{\setbox0=\vbox to\vsize{\boxmaxdepth\maxdepth \pagecontents}
\ifnum\badness>100 \setbox0=\vbox to\vsize{\unvbox0\vfil}
\message{leaving blank bottom}\else
\message{keeping last line position}\fi
\box0
}
% test:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna. Morbi euismod interdum nisi ut iaculis. Phasellus elementum nisi et augue molestie varius. Praesent bibendum diam at ligula iaculis pharetra. Aliquam sem urna, maximus ac ante vel, finibus dignissim nisi. Quisque massa nisl, commodo ut porta non, placerat molestie dui. Vivamus sit amet purus nunc. Vestibulum viverra pharetra felis quis aliquam. Duis hendrerit laoreet nulla eget tristique. Maecenas ante eros, condimentum nec euismod consequat, venenatis nec dolor. Suspendisse ut dolor sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam mattis nibh porttitor ipsum eleifend fringilla. Sed vulputate efficitur lorem et consectetur. Fusce sollicitudin volutpat elit, in scelerisque enim. Donec porta dictum leo ac condimentum. Pellentesque ac accumsan felis. Sed egestas eleifend turpis non fermentum. Etiam nisi nunc, pellentesque ac nunc a, lobortis lobortis leo. Sed vestibulum, arcu id ullamcorper varius, lacus tortor venenatis mi, ac euismod libero sem eget sem. Mauris quam dolor, cursus et ex et, tincidunt aliquet velit. Curabitur condimentum elementum arcu id efficitur. Phasellus hendrerit nulla nec nibh dictum consequat. Cras eget turpis nulla. Donec metus urna, elementum non turpis vitae, tempus tincidunt libero. Nam augue sapien, venenatis vulputate risus sit amet, scelerisque mollis neque. Nam eu diam libero. Vivamus vestibulum, tellus suscipit vulputate lobortis, dolor nunc dictum est, vel imperdiet nisl dolor in purus. Donec in maximus leo. Phasellus eu sem dapibus, laoreet risus nec, eleifend ex. Sed id laoreet magna. Phasellus sit amet ultricies sem. Phasellus id felis viverra, porttitor enim vitae, accumsan nisi. Aenean ex tortor, elementum a placerat at, vulputate at ligula. Donec sagittis lacus ut elementum venenatis. Aliquam rhoncus feugiat egestas. In dapibus urna sed vulputate accumsan. Duis sit amet metus metus. Ut risus urna, blandit ac diam in, sodales tempus arcu. Nullam sed gravida justo, non auctor ex. Maecenas ac egestas velit, vitae fringilla sem. Cras quis justo orci. In maximus rhoncus lectus, sed tincidunt neque efficitur finibus. In sit amet gravida neque. Mauris egestas nec neque in finibus. Nulla venenatis sagittis mauris, vitae placerat quam scelerisque imperdiet. Nulla ullamcorper sem ut dolor eleifend, in pellentesque justo eleifend. Donec euismod sed leo sed venenatis. Nam vestibulum euismod ante id faucibus. Vestibulum vestibulum enim tortor, a eleifend nisi aliquam nec. Nulla sem ipsum, varius vel volutpat nec, condimentum id diam. Aenean vehicula libero vel turpis tristique, vitae pharetra erat luctus. Sed finibus libero ac velit scelerisque, a hendrerit dui bibendum. Cras in urna dolor. Donec cursus ultricies sapien ut iaculis. Suspendisse iaculis congue nisi, sit amet condimentum nunc venenatis nec. Sed vitae tellus tempus, feugiat purus vitae, aliquam est. Mauris mattis ante vel felis mattis, quis gravida felis facilisis. Sed eu purus quis nunc porttitor euismod. Sed quis efficitur quam. Mauris vulputate massa vitae libero tincidunt, sit amet condimentum tortor dapibus. Ut sed arcu accumsan tellus vehicula tincidunt in nec ante. Mauris in sagittis odio. Curabitur quis turpis ac felis hendrerit tincidunt et eu tortor.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringil
% a barrier in the page contents:
\hbox{\vrule height10cm}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringil
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringil
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna. Morbi euismod interdum nisi ut iaculis. Phasellus elementum nisi et augue molestie varius. Praesent bibendum diam at ligula iaculis pharetra. Aliquam sem urna, maximus ac ante vel, finibus dignissim nisi. Quisque massa nisl, commodo ut porta non, placerat molestie dui. Vivamus sit amet purus nunc. Vestibulum viverra pharetra felis quis aliquam. Duis hendrerit laoreet nulla eget tristique. Maecenas ante eros, condimentum nec euismod consequat, venenatis nec dolor. Suspendisse ut dolor sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam mattis nibh porttitor ipsum eleifend fringilla. Sed vulputate efficitur lorem et consectetur. Fusce sollicitudin volutpat elit, in scelerisque enim. Donec porta dictum leo ac condimentum. Pellentesque ac accumsan felis. Sed egestas eleifend turpis non fermentum. Etiam nisi nunc, pellentesque ac nunc a, lobortis lobortis leo. Sed vestibulum, arcu id ullamcorper varius, lacus tortor venenatis mi, ac euismod libero sem eget sem. Mauris quam dolor, cursus et ex et, tincidunt aliquet velit. Curabitur condimentum elementum arcu id efficitur. Phasellus hendrerit nulla nec nibh dictum consequat. Cras eget turpis nulla. Donec metus urna, elementum non turpis vitae, tempus tincidunt libero. Nam augue sapien, venenatis vulputate risus sit amet, scelerisque mollis neque. Nam eu diam libero. Vivamus vestibulum, tellus suscipit vulputate lobortis, dolor nunc dictum est, vel imperdiet nisl dolor in purus. Donec in maximus leo. Phasellus eu sem dapibus, laoreet risus nec, eleifend ex. Sed id laoreet magna. Phasellus sit amet ultricies sem. Phasellus id felis viverra, porttitor enim vitae, accumsan nisi. Aenean ex tortor, elementum a placerat at, vulputate at ligula. Donec sagittis lacus ut elementum venenatis. Aliquam rhoncus feugiat egestas. In dapibus urna sed vulputate accumsan. Duis sit amet metus metus. Ut risus urna, blandit ac diam in, sodales tempus arcu. Nullam sed gravida justo, non auctor ex. Maecenas ac egestas velit, vitae fringilla sem. Cras quis justo orci. In maximus rhoncus lectus, sed tincidunt neque efficitur finibus. In sit amet gravida neque. Mauris egestas nec neque in finibus. Nulla venenatis sagittis mauris, vitae placerat quam scelerisque imperdiet. Nulla ullamcorper sem ut dolor eleifend, in pellentesque justo eleifend. Donec euismod sed leo sed venenatis. Nam vestibulum euismod ante id faucibus. Vestibulum vestibulum enim tortor, a eleifend nisi aliquam nec. Nulla sem ipsum, varius vel volutpat nec, condimentum id diam. Aenean vehicula libero vel turpis tristique, vitae pharetra erat luctus. Sed finibus libero ac velit scelerisque, a hendrerit dui bibendum. Cras in urna dolor. Donec cursus ultricies sapien ut iaculis. Suspendisse iaculis congue nisi, sit amet condimentum nunc venenatis nec. Sed vitae tellus tempus, feugiat purus vitae, aliquam est. Mauris mattis ante vel felis mattis, quis gravida felis facilisis. Sed eu purus quis nunc porttitor euismod. Sed quis efficitur quam. Mauris vulputate massa vitae libero tincidunt, sit amet condimentum tortor dapibus. Ut sed arcu accumsan tellus vehicula tincidunt in nec ante. Mauris in sagittis odio. Curabitur quis turpis ac felis hendrerit tincidunt et eu tortor.
\bye
尝试通过 运行它pdftex test
。
在 OpTeX 中,想法是类似的,但是它的 \output 例程使用不同的词汇:
\_def\_completepage{\_vbox{%
\_resetcolor
\_istoksempty \_pgbackground
\_iffalse \_backgroundbox{\_the\_pgbackground}\_nointerlineskip \_fi
\_makeheadline
\setbox0=\_vbox to\_vsize {\_boxmaxdepth=\_maxdepth \_pagecontents}%
\ifnum\badness>100 \setbox0=\vbox to\vsize{\unvbox0\vfil}
\message{leaving blank bottom}\else
\message{keeping last line position}\fi
\box0
\_makefootline}%
}
% test:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna. Morbi euismod interdum nisi ut iaculis. Phasellus elementum nisi et augue molestie varius. Praesent bibendum diam at ligula iaculis pharetra. Aliquam sem urna, maximus ac ante vel, finibus dignissim nisi. Quisque massa nisl, commodo ut porta non, placerat molestie dui. Vivamus sit amet purus nunc. Vestibulum viverra pharetra felis quis aliquam. Duis hendrerit laoreet nulla eget tristique. Maecenas ante eros, condimentum nec euismod consequat, venenatis nec dolor. Suspendisse ut dolor sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam mattis nibh porttitor ipsum eleifend fringilla. Sed vulputate efficitur lorem et consectetur. Fusce sollicitudin volutpat elit, in scelerisque enim. Donec porta dictum leo ac condimentum. Pellentesque ac accumsan felis. Sed egestas eleifend turpis non fermentum. Etiam nisi nunc, pellentesque ac nunc a, lobortis lobortis leo. Sed vestibulum, arcu id ullamcorper varius, lacus tortor venenatis mi, ac euismod libero sem eget sem. Mauris quam dolor, cursus et ex et, tincidunt aliquet velit. Curabitur condimentum elementum arcu id efficitur. Phasellus hendrerit nulla nec nibh dictum consequat. Cras eget turpis nulla. Donec metus urna, elementum non turpis vitae, tempus tincidunt libero. Nam augue sapien, venenatis vulputate risus sit amet, scelerisque mollis neque. Nam eu diam libero. Vivamus vestibulum, tellus suscipit vulputate lobortis, dolor nunc dictum est, vel imperdiet nisl dolor in purus. Donec in maximus leo. Phasellus eu sem dapibus, laoreet risus nec, eleifend ex. Sed id laoreet magna. Phasellus sit amet ultricies sem. Phasellus id felis viverra, porttitor enim vitae, accumsan nisi. Aenean ex tortor, elementum a placerat at, vulputate at ligula. Donec sagittis lacus ut elementum venenatis. Aliquam rhoncus feugiat egestas. In dapibus urna sed vulputate accumsan. Duis sit amet metus metus. Ut risus urna, blandit ac diam in, sodales tempus arcu. Nullam sed gravida justo, non auctor ex. Maecenas ac egestas velit, vitae fringilla sem. Cras quis justo orci. In maximus rhoncus lectus, sed tincidunt neque efficitur finibus. In sit amet gravida neque. Mauris egestas nec neque in finibus. Nulla venenatis sagittis mauris, vitae placerat quam scelerisque imperdiet. Nulla ullamcorper sem ut dolor eleifend, in pellentesque justo eleifend. Donec euismod sed leo sed venenatis. Nam vestibulum euismod ante id faucibus. Vestibulum vestibulum enim tortor, a eleifend nisi aliquam nec. Nulla sem ipsum, varius vel volutpat nec, condimentum id diam. Aenean vehicula libero vel turpis tristique, vitae pharetra erat luctus. Sed finibus libero ac velit scelerisque, a hendrerit dui bibendum. Cras in urna dolor. Donec cursus ultricies sapien ut iaculis. Suspendisse iaculis congue nisi, sit amet condimentum nunc venenatis nec. Sed vitae tellus tempus, feugiat purus vitae, aliquam est. Mauris mattis ante vel felis mattis, quis gravida felis facilisis. Sed eu purus quis nunc porttitor euismod. Sed quis efficitur quam. Mauris vulputate massa vitae libero tincidunt, sit amet condimentum tortor dapibus. Ut sed arcu accumsan tellus vehicula tincidunt in nec ante. Mauris in sagittis odio. Curabitur quis turpis ac felis hendrerit tincidunt et eu tortor.
% barrierr:
\hbox{\vrule height11cm}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna. Morbi euismod interdum nisi ut iaculis. Phasellus elementum nisi et augue molestie varius. Praesent bibendum diam at ligula iaculis pharetra. Aliquam sem urna, maximus ac ante vel, finibus dignissim nisi. Quisque massa nisl, commodo ut porta non, placerat molestie dui. Vivamus sit amet purus nunc. Vestibulum viverra pharetra felis quis aliquam. Duis hendrerit laoreet nulla eget tristique. Maecenas ante eros, condimentum nec euismod consequat, venenatis nec dolor. Suspendisse ut dolor sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam mattis nibh porttitor ipsum eleifend fringilla. Sed vulputate efficitur lorem et consectetur. Fusce sollicitudin volutpat elit, in scelerisque enim. Donec porta dictum leo ac condimentum. Pellentesque ac accumsan felis. Sed egestas eleifend turpis non fermentum. Etiam nisi nunc, pellentesque ac nunc a, lobortis lobortis leo. Sed vestibulum, arcu id ullamcorper varius, lacus tortor venenatis mi, ac euismod libero sem eget sem. Mauris quam dolor, cursus et ex et, tincidunt aliquet velit. Curabitur condimentum elementum arcu id efficitur. Phasellus hendrerit nulla nec nibh dictum consequat. Cras eget turpis nulla. Donec metus urna, elementum non turpis vitae, tempus tincidunt libero. Nam augue sapien, venenatis vulputate risus sit amet, scelerisque mollis neque. Nam eu diam libero. Vivamus vestibulum, tellus suscipit vulputate lobortis, dolor nunc dictum est, vel imperdiet nisl dolor in purus. Donec in maximus leo. Phasellus eu sem dapibus, laoreet risus nec, eleifend ex. Sed id laoreet magna. Phasellus sit amet ultricies sem. Phasellus id felis viverra, porttitor enim vitae, accumsan nisi. Aenean ex tortor, elementum a placerat at, vulputate at ligula. Donec sagittis lacus ut elementum venenatis. Aliquam rhoncus feugiat egestas. In dapibus urna sed vulputate accumsan. Duis sit amet metus metus. Ut risus urna, blandit ac diam in, sodales tempus arcu. Nullam sed gravida justo, non auctor ex. Maecenas ac egestas velit, vitae fringilla sem. Cras quis justo orci. In maximus rhoncus lectus, sed tincidunt neque efficitur finibus. In sit amet gravida neque. Mauris egestas nec neque in finibus. Nulla venenatis sagittis mauris, vitae placerat quam scelerisque imperdiet. Nulla ullamcorper sem ut dolor eleifend, in pellentesque justo eleifend. Donec euismod sed leo sed venenatis. Nam vestibulum euismod ante id faucibus. Vestibulum vestibulum enim tortor, a eleifend nisi aliquam nec. Nulla sem ipsum, varius vel volutpat nec, condimentum id diam. Aenean vehicula libero vel turpis tristique, vitae pharetra erat luctus. Sed finibus libero ac velit scelerisque, a hendrerit dui bibendum. Cras in urna dolor. Donec cursus ultricies sapien ut iaculis. Suspendisse iaculis congue nisi, sit amet condimentum nunc venenatis nec. Sed vitae tellus tempus, feugiat purus vitae, aliquam est. Mauris mattis ante vel felis mattis, quis gravida felis facilisis. Sed eu purus quis nunc porttitor euismod. Sed quis efficitur quam. Mauris vulputate massa vitae libero tincidunt, sit amet condimentum tortor dapibus. Ut sed arcu accumsan tellus vehicula tincidunt in nec ante. Mauris in sagittis odio. Curabitur quis turpis ac felis hendrerit tincidunt et eu tortor.
\bye
答案2
不完全是你想要的,但这会修改一些东西,所以在输出开始时它会测量内容的自然高度,如果在所需大小的 40pt 范围内,它就会使用 flushbottom,否则它会使用 ragged
终端和日志报告
Using raggedbottom on page 1
46.47656pt>40pt
Using flushbottom on page 2
6.47656pt<=40pt
Using raggedbottom on page 3
426.47656pt>40pt
您的示例修改为
\documentclass{book}
\usepackage{lipsum}
\usepackage[showframe]{geometry}
\widowpenalties 1 10000 %deliberately exaggerated
\newcommand{\test}{%
\vspace{10pt plus 1pt minus 1pt}
TEST%
\vspace{10pt plus 1pt minus 1pt}
}
\flushbottom
\makeatletter
\def\@texttop{%
\setbox0\vbox{\unvcopy\@outputbox}% use 255 instead of \@outputbox in old formats
\ifdim\dimexpr\@colht-\ht0
> 40pt % arbitrary value at which switch
\typeout{Using raggedbottom on page \thepage}%
\typeout{\the\dimexpr\@colht-\ht0>40pt}%
\def\@textbottom{\vskip \z@ \@plus.0001fil}%
\else
\typeout{Using flushbottom on page \thepage}%
\typeout{\the\dimexpr\@colht-\ht0<=40pt}%
\def\@textbottom{}%
\fi}
\def\@textbottom{\vskip 0pt plus 1pt}
\makeatletter
% \raggedbottom
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna. Morbi euismod interdum nisi ut iaculis. Phasellus elementum nisi et augue molestie varius. Praesent bibendum diam at ligula iaculis pharetra. Aliquam sem urna, maximus ac ante vel, finibus dignissim nisi. Quisque massa nisl, commodo ut porta non, placerat molestie dui. Vivamus sit amet purus nunc. Vestibulum viverra pharetra felis quis aliquam. Duis hendrerit laoreet nulla eget tristique. Maecenas ante eros, condimentum nec euismod consequat, venenatis nec dolor. Suspendisse ut dolor sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam mattis nibh porttitor ipsum eleifend fringilla. Sed vulputate efficitur lorem et consectetur. Fusce sollicitudin volutpat elit, in scelerisque enim. Donec porta dictum leo ac condimentum. Pellentesque ac accumsan felis. Sed egestas eleifend turpis non fermentum. Etiam nisi nunc, pellentesque ac nunc a, lobortis lobortis leo. Sed vestibulum, arcu id ullamcorper varius, lacus tortor venenatis mi, ac euismod libero sem eget sem. Mauris quam dolor, cursus et ex et, tincidunt aliquet velit. Curabitur condimentum elementum arcu id efficitur. Phasellus hendrerit nulla nec nibh dictum consequat. Cras eget turpis nulla. Donec metus urna, elementum non turpis vitae, tempus tincidunt libero. Nam augue sapien, venenatis vulputate risus sit amet, scelerisque mollis neque. Nam eu diam libero. Vivamus vestibulum, tellus suscipit vulputate lobortis, dolor nunc dictum est, vel imperdiet nisl dolor in purus. Donec in maximus leo. Phasellus eu sem dapibus, laoreet risus nec, eleifend ex. Sed id laoreet magna. Phasellus sit amet ultricies sem. Phasellus id felis viverra, porttitor enim vitae, accumsan nisi. Aenean ex tortor, elementum a placerat at, vulputate at ligula. Donec sagittis lacus ut elementum venenatis. Aliquam rhoncus feugiat egestas. In dapibus urna sed vulputate accumsan. Duis sit amet metus metus. Ut risus urna, blandit ac diam in, sodales tempus arcu. Nullam sed gravida justo, non auctor ex. Maecenas ac egestas velit, vitae fringilla sem. Cras quis justo orci. In maximus rhoncus lectus, sed tincidunt neque efficitur finibus. In sit amet gravida neque. Mauris egestas nec neque in finibus. Nulla venenatis sagittis mauris, vitae placerat quam scelerisque imperdiet. Nulla ullamcorper sem ut dolor eleifend, in pellentesque justo eleifend. Donec euismod sed leo sed venenatis. Nam vestibulum euismod ante id faucibus. Vestibulum vestibulum enim tortor, a eleifend nisi aliquam nec. Nulla sem ipsum, varius vel volutpat nec, condimentum id diam. Aenean vehicula libero vel turpis tristique, vitae pharetra erat luctus. Sed finibus libero ac velit scelerisque, a hendrerit dui bibendum. Cras in urna dolor. Donec cursus ultricies sapien ut iaculis. Suspendisse iaculis congue nisi, sit amet condimentum nunc venenatis nec. Sed vitae tellus tempus, feugiat purus vitae, aliquam est. Mauris mattis ante vel felis mattis, quis gravida felis facilisis. Sed eu purus quis nunc porttitor euismod. Sed quis efficitur quam. Mauris vulputate massa vitae libero tincidunt, sit amet condimentum tortor dapibus. Ut sed arcu accumsan tellus vehicula tincidunt in nec ante. Mauris in sagittis odio. Curabitur quis turpis ac felis hendrerit tincidunt et eu tortor.
\test
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna.
\def\zz{%
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec purus turpis, fringilla sit amet ullamcorper id, auctor vitae libero. Donec quam leo, congue nec nibh at, accumsan pharetra ex. Proin scelerisque vestibulum vulputate. Fusce imperdiet rhoncus lectus, et semper urna. Morbi euismod interdum nisi ut iaculis. Phasellus elementum nisi et augue molestie varius. Praesent bibendum diam at ligula iaculis pharetra. Aliquam sem urna, maximus ac ante vel, finibus dignissim nisi. Quisque massa nisl, commodo ut porta non, placerat molestie dui. Vivamus sit amet purus nunc. Vestibulum viverra pharetra felis quis aliquam. Duis hendrerit laoreet nulla eget tristique. Maecenas ante eros, condimentum nec euismod consequat, venenatis nec dolor. Suspendisse ut dolor sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam mattis nibh porttitor ipsum eleifend fringilla. Sed vulputate efficitur lorem et consectetur. Fusce sollicitudin volutpat elit, in scelerisque enim. Donec porta dictum leo ac condimentum. Pellentesque ac accumsan felis. Sed egestas eleifend turpis non fermentum. Etiam nisi nunc, pellentesque ac nunc a, lobortis lobortis leo. Sed vestibulum, arcu id ullamcorper varius, lacus tortor venenatis mi, ac euismod libero sem eget sem. Mauris quam dolor, cursus et ex et, tincidunt aliquet velit. Curabitur condimentum elementum arcu id efficitur. Phasellus hendrerit nulla nec nibh dictum consequat. Cras eget turpis nulla. Donec metus urna, elementum non turpis vitae, tempus tincidunt libero. Nam augue sapien, venenatis vulputate risus sit amet, scelerisque mollis neque. Nam eu diam libero. Vivamus vestibulum, tellus suscipit vulputate lobortis, dolor nunc dictum est, vel imperdiet nisl dolor in purus}
\zz
\widowpenalties0
\zz
\zz
\end{document}