分頁符號之前或之後不得使用行分隔符

分頁符號之前或之後不得使用行分隔符

我建立了一條水平線來分隔文件中的元素。我的問題是,當它恰好位於頁面頂部(即分頁符號之後)或底部(即分頁符號之前)時,如何將其設為不使用?

\newcommand{\Sep}
{
    \vspace{0.5cm}
    \begin{center}
    \rule{3cm}{1.5pt}
    \end{center}
    \vspace{0.5cm}
}

在此輸入影像描述

微量元素

\documentclass{article}

\newcommand{\Sep}
{
\vspace{0.5cm}
\begin{center}
\rule{3cm}{1.5pt}
\end{center}
\vspace{0.5cm}
}

\begin{document}

Text

\Sep

More text


\end{document}

答案1

\cleaders之後使用\vskip。當斷點是這樣的時候它就會消失\vskip。它們是經典的 TeX 原語:

\def\Sep{\vskip 0.5cm
   \cleaders\hbox to\hsize{\hss\vrule height1.5pt width3cm\hss}\vskip 2pt
   \nobreak\vskip 0.5cm \relax
}

答案2

請注意,我在頁面底部檢查是否有足夠的空間容納\Sep( 2\parskip+1cm+1.5pt)。如果沒有,我會強制 a\newpage將以下文字保留在下一頁。

\documentclass{article}
\usepackage{tikzpagenodes}
\usepackage{lipsum}

\newlength{\tempdima}

\newcommand{\Sep}%
{\tikz[remember picture,overlay]{%
  \pgfextracty{\tempdima}{\pgfpointdiff{\pgfpointorigin}%
    {\pgfpointanchor{current page text area}{north}}}
  \global\tempdima=\tempdima}%
\ifdim\tempdima<\baselineskip
\else\ifdim\tempdima>\dimexpr\textheight-2\parskip-1cm-1.5pt\relax\newpage
  \else
    \vspace{0.5cm}
    \begin{center}
    \rule{3cm}{1.5pt}
    \end{center}
    \vspace{0.5cm}
  \fi
\fi}

\begin{document}
\Sep
\lipsum[1]
\Sep
\lipsum[2]
\rule{1pt}{20\baselineskip}\par
\Sep
\lipsum[3]
\end{document}

相關內容