我从中汲取灵感这个帖子将 raggedbottom 设置为仅环境的内容,而不是文档的其他部分(在书中)。但是,似乎 afterpage 命令和/或全局变量的使用在环境中无法按我的预期工作。在下面的 MWE 中,您会看到文本“extbottomexttop”打印到第二页,因此似乎@textbottom
读取失败。我尝试使用\@{textbottom}
其他编程语言(我从其他编程语言中了解到)但也没有帮助。
\documentclass{book}
\usepackage{afterpage}
\usepackage{lipsum}
\newenvironment{chaptertitlepage}{
\raggedbottom
}{%
\makeatletter
\afterpage{\global\let\@textbottom\relax \global\let\@texttop\relax}
\pagebreak
}
\begin{document}
\begin{chaptertitlepage}
\chapter{First chapter starts here}
It contains information about authors and an abstract which should all fit on the first page.
\lipsum[1-2]
\end{chaptertitlepage}
\section{Introduction}
The other text follows after
\lipsum[3-5]
\end{document}
答案1
似乎您想在环境之后强制进行短暂(不规则)的分页,因此只需调用\clearpage
\documentclass{book}
\usepackage{lipsum}
\newenvironment{chaptertitlepage}{\clearpage}{\clearpage}
\begin{document}
\begin{chaptertitlepage}
\chapter{First chapter starts here}
It contains information about authors and an abstract which should all fit on the first page.
\lipsum[1-2]
\end{chaptertitlepage}
\section{Introduction}
The other text follows after
\lipsum[3-5]
\end{document}
答案2
问题中的代码使用@
名称中包含以下内容的命令名称:
\newenvironment{chaptertitlepage}{
\raggedbottom
}{%
\makeatletter
\afterpage{\global\let\@textbottom\relax \global\let\@texttop\relax}
\pagebreak
}
代码\newenvironment{...}{...}{...}
会立即解析,但\makeatletter
稍后执行,当环境执行时。但那时,代码已经解析:\@
,'t','e',...
\makeatletter
在定义环境时尽早使用:
\makeatletter
\newenvironment{chaptertitlepage}{%
\raggedbottom
}{%
\afterpage{\global\let\@textbottom\relax \global\let\@texttop\relax}%
\pagebreak
}
\makeatother