当 \textheight 在文档中间发生变化时会发生什么?

当 \textheight 在文档中间发生变化时会发生什么?

我知道这通常被认为是不明智的,但我需要了解\textheight在文档中间发生更改时会发生什么。从这个例子中,似乎更改在下一个页面,何时\vsize发生改变。

\documentclass{article}
\begin{document}
\typeout{Page 1:}
\showthe\textheight
\showthe\vsize
abc
\newpage
\typeout{Page 2:}
\addtolength{\textheight}{1cm}
\showthe\textheight
\showthe\vsize
def
\newpage
\typeout{Page 3:}
\showthe\textheight
\showthe\vsize
ghi
\end{document}

总是这样吗?

答案1

在文档中间进行更改并非“不明智” \textheight——它不受支持,如果在中途进行更改,可能会发生奇怪的事情。总的来说,你是对的,如果你这样做,它似乎会影响下一页,但浮动算法存在与页面异步的依赖关系(例如,遇到浮动时会进行测试以确保它不超过\textheight,如果超过,则会人为缩短它,以便浮动算法可以预期所有浮动都适合页面)。

但也存在其他令人惊讶的副作用:试试这个例子:

\documentclass[twocolumn]{article}

\usepackage{lipsum}

\setlength\textheight{4\baselineskip}\addtolength\textheight{\topskip}

\begin{document}

%\begin{figure*}  X\\Y \end{figure*}  %  <--- uncomment for test and watch what happens to page 2

1\\2\\3\\4\\5\\6\\7\\8\\9 \newpage

\addtolength\textheight{-3\baselineskip}

\lipsum

\end{document}

下面是第 2 页有浮动和没有浮动时的效果(从第 3 页开始高度才减少):

在此处输入图片描述

但由于浮动已经存在,第二页被缩短了,但现在内容太多了: 在此处输入图片描述

现在有人可能会认为这是 LaTeX 2e(甚至是 LaTeX2.09)的错误,但有人可能会称其为功能,因为它是不受支持的输入。

总而言之,如果你需要如果你想构建一个可以改变的东西,\textheight那么我担心你需要研究它被使用的所有地方

grep textheight latex.ltx
grep @colht latex.ltx

以及那里发生的事情是否会影响您正在尝试做的事情 --- 但正如我所说,它不是一个受支持的接口变量。

答案2

\textheight在浮动放置算法的各个点也会被参考。这就是为什么lscape包(\textheight当然会改变)\clearpage在切换大小时会执行操作的原因。如果浮动从它决定需要浮动的点浮动到\textheight不同的点,则效果必须是确定性的,但它们可能都是坏的......

可能值得注意的是,对于页面高度的临时更改,该\enlargethispage命令是受支持的接口,这本质上是使用隐藏的内部浮点数实现的,并且不会改变,这并不完全是巧合\textheight

答案3

\textheight仅在当前页面结束后才生效。

如果您确实需要更改当前页面的高度,\enlargethispage这就是您想要的。但是,如果您打算让全长浮动占据整个页面,或者即使您想允许略大的“常规”浮动与某些文本共存于当前页面上,我不知道会发生什么。(如果您坚持的话,大卫可能会解决这个问题。)

可能值得一提的是,在当前页面输出后,效果就会enlargethispage消失。它并不打算在文档的其余部分持续存在。

相关内容