宏的行为取决于是否位于新页面之上

宏的行为取决于是否位于新页面之上

有没有办法可以查明当前排版的材料是否会出现在页面顶部?

我正在尝试编写一个宏,当调用该宏时,它会排版一个水平分隔线以将后续内容与前一个内容分开。但是,如果后续内容移到下一页的顶部,则应隐藏水平分隔线。我该怎么做?

我知道\pagetotal并且\thepage这不是要走的路(分页算法通常在材料已经排版并且我的宏已被调用时决定在哪里放置分页符)。

答案1

TeX 提供了一种非常有用但相对较少使用的方法来排版水平规则,具体取决于它们是否恰好是页面上文本块中的最后一个元素。那就是将您的规则合并到垂直粘连中(请记住,TeX 通常会忽略文本块中的最终垂直粘连)。调用\leaders命令系列之一应该可以到达您想要的位置。例如,使用\cleaders,您可以编写:

\documentclass{article}

\newcommand*{\divider}{%
  \medskip%
  \cleaders\vbox to 0.4pt{\hrule width\linewidth}\vskip0.4pt%
  \medskip%
}

\newcommand{\text}{
  I am trying to write a macro which, when invoked, typesets a
  horizontal divider to separate the subsequent content from
  the preceding one.\par\divider}

\begin{document}
\text\text\text\text\text\text\text\text\text\text\text
\text\text\text\text\text\text\text\text\text\text\text
\text\text\text\text\text\text\text\text\text\text\text
That's all!
\end{document} 

相关内容