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