
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}
}
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 \cleaders
despué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 \newpage
mantener 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}