Is het verkeerd om \ clearpage te gebruiken in plaats van \ newpage?
Geplaatst op februari 13, 2021 door admin De commandos \newpage
en \clearpage
forceren beide een pagina-einde . Bovendien “verwijdert” het laatste commando ook alle hangende drijvers van de stapel, dwz, dwingt ze om te worden gezet vanaf de pagina die volgt op het pagina-einde.
Mijn vraag is: is het ooit een vergissing \clearpage
te gebruiken in plaats van \newpage
, behalve in gevallen waarin men niet wil dat er hangende drijvers zijn gespoeld? Bij een terloopse inspectie van de definities van de twee commandos (zie hieronder), kan ik “niet zeggen of er problemen op de loer liggen door altijd \clearpage
te gebruiken.
Gemakshalve is hier de definitie van \newpage
(van latex.ltx
):
\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}
en hier” is de definitie van \clearpage
– merk op dat het \newpage
aanroept:
\def\clearpage{% \ifvmode \ifnum \@dbltopnum =\m@ne \ifdim \pagetotal <\topskip \hbox{}% \fi \fi \fi \newpage \write\m@ne{}% \vbox{}% \penalty -\@Mi }
Antwoord
Technisch gezien is er niets mis met het gebruik van \clearpage
in plaats van \newpage
. De twee commandos hebben echter een verschillende semantiek en de vraag is in welke semantiek je geïnteresseerd bent.
Allereerst, zoals je al zei \clearpage
niet alleen beëindigt de pagina (of kolom in tweekolomsmodus) maar verwijdert bovendien alle drijvers die zijn uitgesteld. Op het eerste gezicht is dat misschien een goed idee, maar overweeg de volgende situatie: je hebt een wachtende float die slechts 1/3 van het paginaformaat is. Nu met \newpage
start u een nieuwe pagina en vervolgens zou het float-algoritme ( zie beschrijving van dit algoritme voor details ) trap in en probeer wachtende floats op de volgende pagina te plaatsen (en zou hoogstwaarschijnlijk de wachtende float toewijzen aan het bovenste gedeelte van de volgende pagina. In tegenstelling hiermee zou \clearpage
ook deze float uitvoeren, maar op een eigen pagina.
Dus in situaties zoals het starten van een hoofdstuk is het raadzaam om het vorige hoofdstuk af te sluiten met een \clearpage
(of liever het nieuwe ermee) om alle drijvers weg te spoelen, maar in andere situaties kan dit resulteren in tamelijk lege paginas met alleen drijvers die al dan niet gewenst zijn.
Een tweede verschil is \clearpage
begint eigenlijk altijd een nieuwe “pagina” terwijl \newpage
eigenlijk alleen de huidige kolom beëindigt — en dat is een groot verschil in de tweekolomsmodus. Probeer gewoon het volgende om zie het verschil:
\documentclass[twocolumn]{article} \begin{document} A test \newpage % ends first column but not page A second test \newpage A clearpage test \clearpage % ends page (which has one column) A second clearpage test \end{document}
Opmerkingen
Answer
Naar mijn mening kunt u waar dan ook, tenzij” er “een speciale reden is om dit niet te doen”. Deze speciale reden voor mij is wanneer je (om esthetische of wat voor reden dan ook) echt wilt hebben:
- een echt lege pagina, dan roep je bijvoorbeeld
\newpage\leavevmode\thispagestyle{empty}\newpage
- iets op een specifieke pagina of wat dan ook (
\clearpage
kan meer dan één pagina-einde toevoegen als er “veel drijvers in de wachtrij zijn, terwijl\newpage
er slechts één toevoegt) - als u twee paginas naast elkaar (ik vind het leuk als de hoofdstuktitel op de linkerpagina zonder tekst staat en de tekst op de rechterpagina begint – dan gebruik ik
\newpage
na typen de titel van het hoofdstuk).
Natuurlijk moet al het gebruik van een van deze twee commandos conceptueel zijn, ik bedoel, je zou ze niet moeten gebruiken in een hoofdtekst van je werk, je gebruik ze in macrodefinities (zoals mijn \chapter
hierboven vermeld) of in preambule / …
twocolumn
in mijn antwoord. Maar eerlijk gezegd: het gebruik van\newpage
of\clearpage
binnen een tekstblok zoals een hoofdstuk wordt naar mijn mening echt afgekeurd en moet heel voorzichtig gebeuren.\newpage
in dat geval waarschijnlijk geschikter is.\newpage
forceert een nieuwe kolom terwijl\clearpage
forceert een nieuwe pagina.