Por que \chapter + \include cria uma página em branco?

Por que \chapter + \include cria uma página em branco?

Estou escrevendo um livro com vários capítulos e dividi cada capítulo em arquivos separados. No meu preâmbulo, tenho isto:

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

Arquivo chap1.tex:

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

e semelhante para chap2.tex(e todos os outros arquivos de capítulo). Isso funciona conforme o esperado.

No entanto, recentemente pensei que, em vez de ter \chapter{}nos arquivos dos capítulos, iria movê-los para o preâmbulo e manter apenas o conteúdo nos arquivos dos capítulos. Assim:

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

\chapter{Number 2}
\include{chap2}

e assim por diante. Porém, o resultado disso não foi o esperado. Recebo um título de capítulo (esperado), mas o resto da página está completamente em branco. Tenho que virar a página para chegar ao conteúdo do capítulo.

Os resultados esperados foram exatamente os mesmos que se eu tivesse \chapter{}dentro dos arquivos dos capítulos.

Por que aparece a página em branco se eu dividir \chapter{}o conteúdo do capítulo?

Responder1

De texdef -t latex \includeencontramos:

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

onde também podemos encontrar \@include. Então, texdef -t latex \@includeencontramos:

\@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

e logo no início mostra macro:#1 ->\clearpage, ou seja, o primeiro comando é \clearpage.

É por isso que \include{file.tex}limpa a página antes de inserir o conteúdo de file.tex.

Para completar, vamos ver: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

onde encontramos \newpage.

Como exercício para o leitor, confira texdef -t latex \newpage. Além disso, compare o acima com texdef -t latex \input.

informação relacionada