为什么 \chapter + \include 会产生空白页?

为什么 \chapter + \include 会产生空白页?

我正在写一本包含多个章节的书,我将每个章节拆分为单独的文件。在我的序言中,我有以下内容:

\include{chap1}
\include{chap2}
...

文件chap1.tex

\chapter{Chapter text - Number 1}
Text text text

和类似的chap2.tex(以及所有其他章节文件)。这按预期工作。

但是,我最近想,与其将它们\chapter{}放在章节文件中,不如将它们移到序言中,只将内容保留在章节文件中。就像这样:

\chapter{Chapter text - Number 1}
\include{chap1}

\chapter{Number 2}
\include{chap2}

等等。然而,结果并不像预期的那样。我得到了一个章节标题(预期),但页面的其余部分完全是空白的。我必须翻页才能看到章节内容。

\chapter{}预期结果与我在章节文件中看到的完全相同。

\chapter{}为什么我拆分章节内容时会出现空白页?

答案1

我们texdef -t latex \include发现:

\include:
macro:#1->\relax \ifnum \@auxout =\@partaux \@latex@error {\string \include \space cannot be nested}\@eha \else \@include #1 \fi

我们还可以找到\@include。因此,从texdef -t latex \@include我们可以找到:

\@include:
macro:#1 ->\clearpage \if@filesw \immediate \write \@mainaux {\string \@input {#1.aux}}\fi \@tempswatrue \if@partsw \@tempswafalse
\edef \reserved@b {#1}\@for \reserved@a :=\@partlist \do {\ifx
\reserved@a \reserved@b \@tempswatrue \fi }\fi \if@tempswa \let
\@auxout \@partaux \if@filesw \immediate \openout \@partaux #1.aux
\immediate \write \@partaux {\relax }\fi \@input@ {#1.tex}\clearpage
\@writeckpt {#1}\if@filesw \immediate \closeout \@partaux \fi \else
\deadcycles \z@ \@nameuse {cp@#1}\fi \let \@auxout \@mainaux

并且最开始显示macro:#1 ->\clearpage,也就是说,第一个命令是\clearpage

这就是为什么\include{file.tex}在插入内容之前清除页面的原因file.tex

为了完整起见,让我们看看:texdef -t latex \clearpage

\clearpage:
macro:->\ifvmode \ifnum \@dbltopnum =\m@ne \ifdim \pagetotal <\topskip \hbox {}\fi \fi \fi \newpage \write \m@ne {}\vbox {}\penalty -\@Mi

我们在哪里找到\newpage

作为给读者的练习,检查texdef -t latex \newpage。另外,将上面的内容与 进行比较texdef -t latex \input

相关内容