There is a big difference between \newpage
and \vfill\eject
.
Definition of \newpage
in LaTeX
% latex.ltx, line 6342:
\def \newpage {%
\if@noskipsec
\ifx \@nodocument\relax
\leavevmode
\global \@noskipsecfalse
\fi
\fi
\if@inlabel
\leavevmode
\global \@inlabelfalse
\fi
\if@nobreak \@nobreakfalse \everypar{}\fi
\par
\vfil
\penalty -\@M}
Definition of \eject
in Plain TeX
% plain.tex, line 558:
\def\break{\penalty-\@M}
% plain.tex, line 564:
\def\eject{\par\break}
LaTeX tries first to catch problems with \everypar
; if \newpage
is given in sectional titles or immediately after or else in lists, some countermeasures are taken.
After this the working is almost identical, but you can notice that \newpage
issues \vfil
, because of how it deals with \flushbottom
and \raggedbottom
. Both constructions end with \penalty-10000
that forces a page break.
\vfill
and\eject
are tex primitives. they are used to define the latex commands\newpage
and\pagebreak
, but the latter contain additional checks.\eject
is primitive:-)\eject
is defined inplain.tex
as{\par\penalty-10000 }
(texbook version). it is "pre-latex", however.