Czy używanie \ clearpage zamiast \ newpage jest złe?
On 13 lutego, 2021 by admin Oba polecenia \newpage
i \clearpage
wymuszają podział strony . Ponadto to drugie polecenie również „opróżnia” wszystkie oczekujące zmienne ze stosu, tj. Zmusza je do złożenia, zaczynając od strony, która następuje po podziale strony.
Moje pytanie brzmi: czy to kiedykolwiek błąd używać \clearpage
zamiast \newpage
, z wyjątkiem przypadków, w których można nie chcieć, aby jakiekolwiek oczekujące zmiennoprzecinkowe były zarumieniony? Po przypadkowym przejrzeniu definicji tych dwóch poleceń (patrz poniżej), nie mogę stwierdzić, czy są jakieś problemy z zawsze korzystaniem z \clearpage
.
Dla ułatwienia, oto „definicja \newpage
(z 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}
i oto definicja \clearpage
– zwróć uwagę, że wywołuje ona \newpage
:
\def\clearpage{% \ifvmode \ifnum \@dbltopnum =\m@ne \ifdim \pagetotal <\topskip \hbox{}% \fi \fi \fi \newpage \write\m@ne{}% \vbox{}% \penalty -\@Mi }
Odpowiedź
Z technicznego punktu widzenia nie ma nic złego w używaniu \clearpage
zamiast \newpage
. Jednak te dwa polecenia mają inną semantykę i pytanie brzmi, która z semantyki Cię interesuje.
Po pierwsze, jak już wspomniałeś \clearpage
nie tylko kończy stronę (lub kolumnę w trybie dwóch kolumn), ale dodatkowo opróżnia wszystkie odroczone elementy zmiennoprzecinkowe. Na pierwszy rzut oka może to być dobry pomysł, ale weź pod uwagę następującą sytuację: masz jedną oczekującą wartość zmiennoprzecinkową, która stanowi zaledwie 1/3 rozmiaru strony. Teraz z \newpage
zaczynasz nową stronę, a następnie algorytm float ( zobacz opis tego algorytmu po szczegóły ) uruchom i spróbuj umieścić pływające elementy oczekujące na następnej stronie (i najprawdopodobniej przypiszą pływające elementy oczekujące do górnego obszaru następnej strony. W przeciwieństwie do tego \clearpage
również wypisze ten pływak, ale na własnej stronie.
Dlatego w sytuacjach takich jak początek rozdziału wskazane jest zakończenie poprzedniego rozdziału znakiem \clearpage
(a raczej rozpoczęcie nowego z nim), aby wypłukać wszystkie elementy zmiennoprzecinkowe, ale w innych sytuacjach może to skutkować dość pustymi stronami, na których znajdują się tylko elementy pływające, co może być pożądane lub nie.
Druga różnica to \clearpage
właściwie zawsze rozpoczyna nową „stronę”, podczas gdy \newpage
tak naprawdę kończy tylko bieżącą kolumnę — i to jest duża różnica w trybie dwukolumnowym. Po prostu spróbuj wykonać następujące czynności, aby zobacz różnicę:
\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}
Komentarze
Odpowiedź
Moim zdaniem możesz użyć \clearpage
gdziekolwiek, chyba że„ istnieje ”specjalny powód, dla którego tego nie robię. Ten szczególny powód jest dla mnie, gdy (ze względów estetycznych lub z jakiegokolwiek innego powodu) naprawdę chcesz mieć:
- naprawdę pusta strona, wtedy wywołujesz na przykład
\newpage\leavevmode\thispagestyle{empty}\newpage
- coś umieszczonego na określonej stronie lub cokolwiek innego (
\clearpage
może dodać więcej niż jeden podział strony, jeśli w kolejce jest dużo elementów zmiennoprzecinkowych, podczas gdy\newpage
dodaje tylko jedną) - , gdy chcesz mieć dwie strony tuż obok siebie nawzajem (podoba mi się, gdy tytuł rozdziału jest na lewej stronie bez tekstu, a tekst zaczyna się na prawej stronie – wtedy używam
\newpage
po typach etowanie tytułu rozdziału).
Z pewnością każde użycie któregokolwiek z tych dwóch poleceń powinno być koncepcyjne, tj. nie powinno się ich używać w głównym tekście swojej pracy, użyj ich w definicjach makr (takich jak mój \chapter
wspomniany powyżej) lub w preambule / …
twocolumn
w mojej odpowiedzi. Ale szczerze: używanie\newpage
lub\clearpage
wewnątrz bloku tekstowego, takiego jak rozdział, jest moim zdaniem źle widziane i powinno być wykonane bardzo ostrożnie.\newpage
jest prawdopodobnie bardziej odpowiedni w tym przypadku.\newpage
wymusza nową kolumnę, podczas gdy\clearpage
wymusza nową stronę.