
ドキュメント内の要素を区切るために水平線を作成しました。質問は、水平線がページの上部 (つまり、改ページの直後) または下部 (つまり、改ページの直前) にあるときに使用されないように設定するにはどうすればよいかということです。
\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
。ブレークポイントが this のときに消えます\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
) のための十分なスペースがあるかどうかを確認していることに注意してください。スペースがない場合は、次のページに続くテキストを保持するように強制します\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}