È sbagliato usare \ clearpage invece di \ newpage?
Su Febbraio 13, 2021 da admin I comandi \newpage
e \clearpage
forzano entrambi uninterruzione di pagina . Inoltre, questultimo comando “svuota” anche tutti i float in sospeso dallo stack, cioè li costringe a essere composti a partire dalla pagina che segue linterruzione di pagina.
La mia domanda è: è mai un errore utilizzare \clearpage
invece di \newpage
, tranne nei casi in cui si potrebbe non volere che siano presenti float in sospeso arrossato? Da unispezione casuale delle definizioni dei due comandi (vedi sotto), non riesco a “dire se ci sono problemi in agguato nellusare sempre \clearpage
.
Per facilità di riferimento, ecco la definizione di \newpage
(da 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}
e qui” è la definizione di \clearpage
– nota che richiama \newpage
:
\def\clearpage{% \ifvmode \ifnum \@dbltopnum =\m@ne \ifdim \pagetotal <\topskip \hbox{}% \fi \fi \fi \newpage \write\m@ne{}% \vbox{}% \penalty -\@Mi }
Risposta
Tecnicamente non cè niente di sbagliato nellusare \clearpage
invece di \newpage
. Tuttavia, i due comandi hanno una semantica diversa e la domanda è quale delle semantiche ti interessa.
Prima di tutto, come hai già detto \clearpage
non solo termina la pagina (o la colonna in modalità a due colonne) ma in aggiunta elimina tutti i float che sono stati rinviati. A prima vista potrebbe essere una buona idea, ma considera la seguente situazione: hai un float in attesa che è solo 1/3 della dimensione della pagina. Ora con \newpage
inizi una nuova pagina e poi lalgoritmo float ( vedi la descrizione di questo algoritmo per i dettagli ) kick in e prova a posizionare i float in attesa nella pagina successiva (e molto probabilmente assegnerebbe il float in attesa allarea superiore della pagina successiva. Al contrario, \clearpage
produrrebbe anche questo float ma su una pagina a sé stante.
Quindi in situazioni come linizio di un capitolo è consigliabile terminare il capitolo precedente con un \clearpage
(o piuttosto iniziare quello nuovo con esso) per eliminare tutti i float, ma in altre situazioni questo potrebbe risultare pagine abbastanza vuote con solo float su di esse che possono o non possono essere desiderati.
Una seconda differenza è \clearpage
in realtà inizia sempre una nuova “pagina” mentre \newpage
in realtà finisce solo la colonna corrente — e questa è una grande differenza nella modalità a due colonne. Prova quanto segue per vedi la differenza:
\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}
Commenti
Risposta
Secondo me, puoi usare \clearpage
ovunque a meno che” non ci sia un motivo speciale per non farlo “. Questo motivo speciale per me è quando (per motivi estetici o per qualsiasi altra ragione) vuoi davvero avere:
- una pagina veramente vuota, quindi chiami ad esempio
\newpage\leavevmode\thispagestyle{empty}\newpage
- qualcosa posizionato su una pagina specifica o qualsiasi altra cosa (
\clearpage
può aggiungere più di un interruzione di pagina se “ci sono molti float in coda, mentre\newpage
ne aggiunge solo uno) - quando vuoi avere due pagine accanto a lun laltro (mi piace quando il titolo del capitolo è nella pagina di sinistra senza testo e il testo inizia sulla pagina di destra, quindi uso
\newpage
dopo i tipi etting il titolo del capitolo).
Sicuramente tutto luso di uno qualsiasi di questi due comandi dovrebbe essere concettuale, voglio dire, non dovresti aver bisogno di usarli in un testo principale del tuo lavoro, tu usali nelle definizioni di macro (come il mio \chapter
menzionato sopra) o nel preambolo / …
twocolumn
nella mia risposta. Ma onestamente: luso di\newpage
o\clearpage
allinterno di un blocco di testo come il capitolo è davvero disapprovato secondo me e dovrebbe essere fatto con molta attenzione.\newpage
è probabilmente più appropriato in questo caso.\newpage
forza una nuova colonna mentre\clearpage
forza una nuova pagina.