如何防止环境内容跨页面损坏?

如何防止环境内容跨页面损坏?

考虑以下代码,几乎逐字复制自这个答案,除了两次调用\lipsum

\lipsum[1-4]

\lipsum[5][1-10]

已添加到文档正文中。

\documentclass{article}

\usepackage{lipsum}

\newenvironment{signenv}[1]{%
\par
\smallskip
\noindent\hrulefill\ %
\begin{picture}(20,20)(0,0)
\put(10,0){\makebox(0,0){#1}}
\put(0,0){\line(1,1){10}}
\put(0,0){\line(1,-1){10}}
\put(20,0){\line(-1,1){10}}
\put(20,0){\line(-1,-1){10}}
\end{picture}\ %
\hrulefill
\par
\bigskip}
{\par\medskip\noindent\hrulefill\par\smallskip}

\begin{document}

\lipsum[1-4]

\lipsum[5][1-10]

\begin{signenv}{A}
\lipsum[1]
\end{signenv}

\end{document}

生成的PDF文件有两页,如下所示。

signenv 跨过分页符,上线分隔

可以看出,signenv环境绘制的顶行出现在与环境内包含的段落不同的页面上。同样,如果你\lipsum

\lipsum[1-3]

\lipsum[4][1]

环境绘制的底线signenv与环境内部包含的段落出现在不同的页面上。

signenv 跨过分页符,并与下线分隔。

我该如何安排,以便signenv环境的顶行和底行始终与环境内的文本出现在同一页面上?

答案1

正如我在原始代码下评论的那样,你可以添加\nopagebreak

\documentclass{article}

\usepackage{lipsum}

\newenvironment{signenv}[1]{%
\par
\smallskip
\noindent\hrulefill\ %
\begin{picture}(20,20)(0,0)
\put(10,0){\makebox(0,0){#1}}
\put(0,0){\line(1,1){10}}
\put(0,0){\line(1,-1){10}}
\put(20,0){\line(-1,1){10}}
\put(20,0){\line(-1,-1){10}}
\end{picture}\ %
\hrulefill
\par
\nopagebreak
\bigskip}
{\par\nopagebreak\medskip\noindent\hrulefill\par\smallskip}

\begin{document}

\lipsum[1-4]

\lipsum[5][1-10]

\begin{signenv}{A}
\lipsum[1]
\end{signenv}

\end{document}

相关内容