考虑以下代码,几乎逐字复制自这个答案,除了两次调用\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
环境绘制的顶行出现在与环境内包含的段落不同的页面上。同样,如果你\lipsum
用
\lipsum[1-3]
\lipsum[4][1]
环境绘制的底线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}