Разделитель строк не следует использовать до или после разрывов страниц.

Разделитель строк не следует использовать до или после разрывов страниц.

Я создал горизонтальную линию для разделения элементов в моем документе. Мой вопрос в том, как сделать так, чтобы она не использовалась, когда она находится в верхней части страницы (т. е. сразу после разрыва страницы) или в нижней части (т. е. прямо перед разрывом страницы)?

\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}

Связанный контент