环境中页面底部仅参差不齐

环境中页面底部仅参差不齐

我从中汲取灵感这个帖子将 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

相关内容