![某个内容是页面上的第一项吗?](https://linux22.com/image/268645/%E6%9F%90%E4%B8%AA%E5%86%85%E5%AE%B9%E6%98%AF%E9%A1%B5%E9%9D%A2%E4%B8%8A%E7%9A%84%E7%AC%AC%E4%B8%80%E9%A1%B9%E5%90%97%EF%BC%9F.png)
我如何从逻辑上识别某个内容是否是页面上的第一个内容,即其上方是否没有任何内容(标题除外)?
考虑以下内容,它基本上是一个特征环境,它将规则置于某些内容之上,以将其与之前的任何内容分开。
可接受的输出:
\documentclass{article}
\usepackage{lipsum}
\newenvironment{feature}[1]{
\vspace*{\baselineskip}
\hrule
\vspace*{\baselineskip}
\textbf{#1}\\
}{
\vspace*{\baselineskip}
}
\begin{document}
%THIS CASE SHOULD HAVE RULE
\lipsum[1]
\begin{feature}{This is the title}
\lipsum[1]
\end{feature}
\end{document}
然而...
如果环境是页面上的唯一项目,或者位于页面顶部,则该规则不仅是多余的,而且实际上完全不受欢迎。如何根据上方是否有内容来打开/关闭规则。
不良输出:
\begin{document}
%THIS CASE SHOULD NOT
\newpage
\begin{feature}{This is the title}
\lipsum[1]
\end{feature}
\end{document}
答案1
领导者提供帮助,因为他们消失在页面顶部,例如:
\documentclass{article}
\usepackage{lipsum}
\newenvironment{feature}[1]{%
\par
\cleaders\vbox to 2\baselineskip{%
\vss
\hrule width\linewidth
\vss
}\vskip2\baselineskip
\textbf{#1}\\
}{
\vspace*{\baselineskip}
}
\begin{document}
%THIS CASE SHOULD HAVE RULE
\lipsum[1]
\begin{feature}{This is the title}
\lipsum[1]
\end{feature}
\newpage
\begin{feature}{Title 2}
\lipsum[1]
\end{feature}
\end{document}
评论:
- 前导符(
\leaders
、\cleaders
、\xleaders
)与 一样在新页面顶部消失\vbox{...}
。它们通常用于目录中的虚线。 - (盒子)引线的语法为:引线命令后跟盒子规范和粘连规范。盒子会根据需要多次放置,以填充指定的粘连空间。在本例中,我们希望精确设置一次盒子,因此盒子的高度与指定的空间相同(
2\baselineskip
)。 - 如果箱子没有完全填满空间,则将
\cleaders
箱子放在中间,将额外的空间放在外面。\xleaders
将空间除以所需的箱子数量,并将每个箱子置于计算空间的中心。(这不适用于此处,因为只有一个箱子完全填满空间,因此没有额外的空间可以分配。) - 有关领导者的更多阅读:“TeX 按主题分类,第 9.2 节领导者”作者:Victor Eijkhout。
\par
被添加到上一段落的结尾。\vbox to 2\baselineskip{...}
与 LaTeX 的 类似\parbox[b][2\baselineskip]{\linewidth}{...}
,但效率更高,可在 之后使用\cleaders
。- 这对线
\vss
将框内的规则垂直居中。它与 LaTeX 的 类似\vspace{0pt plus 1fill minus 1fill}
。 \hrule width\linewidth
是 的纯 TeX 形式,因为的\hrule{\linewidth}{.4pt}
高度默认为。\hrule
0.4pt
\vskip2\baselineskip
是 LaTeX 的普通版本\vspace{2\baselineskip}
。