\vfill 的长度

\vfill 的长度

有没有办法获取 的大小\vfill?我想对间距进行一些计算,我已经尝试过了:

\newlength{\newtest}
\settowidth{\newtest}{\vfill}

我收到一个错误。

有什么建议吗?

答案1

\vfill是无限胶水。数量不是固定值,而是“胶水长度”,可以从到0pt“无穷大”。当 TeX 构造其父垂直框时,其实际长度是已知的。专家可以检查该框并确定 TeX 选择的确切设置。但是,还有一种更简单的方法。许多 TeX 编译器都支持告知位置的功能:pdfTeX(该功能的发明者)在 PDF 和 DVI、XeTeX、LuaTeX 两种模式下都支持该功能。当页面被发送出去时,位置是已知的。savepos包的模块zref提供了一个处理内部的包装器。它将位置记录在辅助文件(.aux)中作为参考,并在下一次 LaTeX 运行中使它们可用。

\documentclass{article}
\usepackage{zref-savepos}
\usepackage{printlen}
\usepackage{lipsum}

\newcommand*{\posdiff}[2]{%
  \zifrefundefined{#1}{\textbf{??}}{%
    \zifrefundefined{#2}{\textbf{??}}{%
      \printlength{\dimexpr\zposy{#1}sp-\zposy{#2}sp\relax}%
    }%
  }%
}
\uselengthunit{mm}

\begin{document}
\section{Hello World}
\lipsum[1-2]

\hrule
\zsavepos{top}
\vfill
\zsavepos{bottom}
\hrule
\newpage
Vertical space on the previous page
between the lines: \posdiff{top}{bottom}
\end{document}

对于想要调试 TeX 框的专家:

  • \showbox需要一个框句柄并在文件中显示该框及其节点内容.log
  • \showlists不带参数则显示当前垂直主列表。
  • \showboxbreadth\showboxdepth是整数寄存器,用于控制显示多少框内容(框可能非常大)。它们的默认值-1在 LaTeX 中是抑制输出的。
  • .log除非\tracingonline(也是整数寄存器)设置为正值,否则输出只会打印在文件中。

答案2

以下可能是 Heiko 答案的一个用例。我假设这里的动机是您在页面顶部有一些固定高度的块(文本),在页面底部有一些可变高度的块(文本)。使用\vfill最大的底部块,您希望提取该信息并将其用作其他页面上块之间的垂直空间。

您可以计算插入的长度\vfill并将其存储在长度(比如)中\vfilllength,如下例所示:

在此处输入图片描述

\documentclass{article}
\usepackage[paperheight=5in]{geometry}% http://ctan.org/pkg/geometry
\usepackage[savepos]{zref}% http://ctan.org/pkg/zref
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\newlength{\vfilllength}
\AtBeginDocument{%
  \setlength{\vfilllength}{\dimexpr\zposy{thetop}sp-\zposy{thebottom}sp}% Calculate \vfill
}
\begin{document}
\lipsum[1]
\par\zsaveposy{thetop}
\vfill
\zsaveposy{thebottom}\par
\noindent\rule{\linewidth}{1in}%
\clearpage
\lipsum[1]
\par\vspace*{\vfilllength}\par
\noindent\rule{\linewidth}{1cm}%
\end{document}

在上述平均能量损失标签thetopthebottom放置在 周围,\vfill以记录标签的垂直位置(以缩放点/sp秒为单位);从页面底部到顶部增加。随后使用 提取它们,\zposy距离通过 计算\dimexpr

请注意,在文档前言中无法设置长度,因为文件.aux(包含 PDF 标签位置)仅在前言完成后才被读取。因此使用\AtBeginDocument

geometry在此示例中,它仅用于最小化页面布局,而lipsum提供了一些虚拟文本,乱数风格。

相关内容