我正在写一份报告,并使用特定的 .cls 文件进行布局和字体等。摘要定义如下:
\newenvironment{abstract}
{
\btypeout{Abstract Page}
\thispagestyle{empty}
\null\vfil
\begin{center}
\setlength{\parskip}{0pt}
{\normalsize \UNIVNAME \par}
\bigskip
{\underline{ABSTRACT} \par}
\bigskip
{\normalsize \FACNAME \par}
{\normalsize \DEPTNAME \par}
\bigskip
{\normalsize \underline{This is a report}\par}
\bigskip
{\normalsize\bf \@title \par}
\medskip
{\normalsize by \authornames \par}
\bigskip
\end{center}
}
然而,在文档中当我使用
\begin{abstract}
Many words that require 2 pages
\end{abstract}
“摘要”一词连同其余定义的术语出现在页面底部,摘要实际上从下一页开始。我想要的是“摘要”一词位于页面顶部,然后实际的摘要页面应该从那里开始,我认为这是正常的做法。到目前为止,一种解决方法是将minipage
整个摘要包含在其中,从而强制“摘要”从页面顶部开始。但是,我很难在 minipage 中手动拆分页面,因为整个文本不适合。仅供参考,就在我之前,abstract
我有以下内容:
\begin{document}
\frontmatter
\title{My title} % TODO Fill in your title
\authors{\texorpdfstring
{\href{mailto:myemail@myuni}{My name}} % TODO Fill in your email address and name
{My name} % TODO Fill in your name (again)
}
\addresses{\groupname\\\deptname\\\univname}
\date{\today}
\subject{}
\keywords{}
\supervisor{Some names} % TODO Fill in your supervisor's name(s)
\examiner{Some names} % TODO Fill in your examiner's name
\maketitle
答案1
实际上,您得到的正是您想要的:一个可无限拉伸的垂直空间,后面是标题,后面是您自己指出的最理想的分页符 —— 即环境的结尾center
。后面的其他潜在分页符都没有如此高的“奖励”(段落行间分页会被收取“惩罚”,两段间分页通常不会收取,但也不会获得奖励),而另一方面,您已规定标题上方的垂直空间可以任意拉伸,且完全没有成本。
我详细阐述了 cfr 的答案中提供的代码,以禁止在环境中包含的文本开始之前出现所有可能的分页符abstract
:
\documentclass{article}
\usepackage{lipsum}
\makeatletter
\renewenvironment{abstract}
{%
\typeout{Abstract Page}%
\cleardoublepage % or simply \clearpage
\thispagestyle{empty}%
\begingroup
\centering
\setlength{\parskip}{0pt}%
{\normalsize UNIVNAME \par}%
\nobreak\bigskip
{\underline{ABSTRACT} \par}%
\nobreak\bigskip
{\normalsize FACNAME \par}%
{\normalsize DEPTNAME \par}%
\nobreak\bigskip
{\normalsize \underline{This is a report}\par}%
\nobreak\bigskip
{\normalsize\bfseries \@title \par}%
\nobreak\medskip
{\normalsize by \@author \par}%
\endgroup
\nobreak\addvspace{\glueexpr\topsep+\partopsep}%
}{}
\makeatother
\title{Title}
\author{Author}
\begin{document}
\begin{abstract}
\lipsum[1-5]
\end{abstract}
\end{document}
该代码产生的输出基本与 cfr 相同。
\null\vfil
最后说一句:在环境定义开头说的原因abstract
可能是你想要一个短的摘要(或多或少)垂直居中在一页上;那对命令可能与\vfil\null
终止环境的代码中发出的命令配对,这在您的问题中没有显示。但是您说您的摘要有两页长。我同意 cfr 的观点,您没有足够清楚地说明您真正想要实现的目标。除非您这样做,否则几乎不可能有效地帮助您。
答案2
由于您的代码不完整,粘贴到标准文档的序言中时无法编译,因此很难确切知道发生了什么。但是,如果您的摘要需要运行到第二页或更多,那么包含\null\vfil
几乎肯定不是您想要的。
我已经用占位符或标准命令替换了未定义的命令,并且使用\renewcommand
而不是\newcommand
仅仅为了重现问题。
下面的代码避免了我尝试重建时不必要地推送到页面底部。它是否适合您是另一个问题。
您发布的代码本质上假设摘要不需要继续到第二页。否则,就会发生您发现的奇怪事情。
\bf
我还用LaTeX-2e 等效项替换了早已过时的字体开关\bfseries
。过时的命令早已弃用,不应再使用。
\documentclass{article}
\usepackage{kantlipsum}
\makeatletter
\renewenvironment{abstract}
{%
\typeout{Abstract Page}
\thispagestyle{empty}
\begin{center}
\setlength{\parskip}{0pt}
{\normalsize UNIVNAME \par}
\bigskip
{\underline{ABSTRACT} \par}
\bigskip
{\normalsize FACNAME \par}
{\normalsize DEPTNAME \par}
\bigskip
{\normalsize \underline{This is a report}\par}
\bigskip
{\normalsize\bfseries \@title \par}
\medskip
{\normalsize by \@author \par}
\bigskip
\end{center}
}{}
\makeatother
\title{Title}
\author{Author}
\begin{document}
\begin{abstract}
\kant[1-5]
\end{abstract}
\end{document}