某个内容是页面上的第一项吗?

某个内容是页面上的第一项吗?

我如何从逻辑上识别某个内容是否是页面上的第一个内容,即其上方是否没有任何内容(标题除外)?

考虑以下内容,它基本上是一个特征环境,它将规则置于某些内容之上,以将其与之前的任何内容分开。

可接受的输出:

\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}高度默认为。\hrule0.4pt
  • \vskip2\baselineskip是 LaTeX 的普通版本\vspace{2\baselineskip}

相关内容