
Я создал горизонтальную линию для разделения элементов в моем документе. Мой вопрос в том, как сделать так, чтобы она не использовалась, когда она находится в верхней части страницы (т. е. сразу после разрыва страницы) или в нижней части (т. е. прямо перед разрывом страницы)?
\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}