El separador de línea no se utilizará antes ni después de los saltos de página.

El separador de línea no se utilizará antes ni después de los saltos de página.

He creado una línea horizontal para separar elementos en mi documento. Mi pregunta es ¿cómo puedo configurarlo para que no se use cuando se encuentra en la parte superior de la página (es decir, justo después de un salto de página) o en la parte inferior (es decir, justo antes de un salto de página)?

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

ingrese la descripción de la imagen aquí

MWE

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

Respuesta1

Usar \cleadersdespués \vskip. Desaparece cuando el punto de ruptura es este \vskip. Son primitivas TeX clásicas:

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

Respuesta2

Tenga en cuenta que en la parte inferior de la página verifico si hay suficiente espacio para \Sep( 2\parskip+1cm+1.5pt). De lo contrario, fuerzo a \newpagemantener el siguiente texto en la página siguiente.

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

información relacionada