改ページの前後に行区切り文字を使用しない

改ページの前後に行区切り文字を使用しない

ドキュメント内の要素を区切るために水平線を作成しました。質問は、水平線がページの上部 (つまり、改ページの直後) または下部 (つまり、改ページの直前) にあるときに使用されないように設定するにはどうすればよいかということです。

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

関連情報