\ newpageの代わりに\ clearpageを使用するのは間違っていますか?
On 2月 13, 2021 by adminコマンド\newpage
と\clearpage
は、どちらも改ページを強制します。さらに、後者のコマンドは、スタックから保留中のすべてのフロートを「フラッシュ」します。つまり、改ページに続くページからタイプセットするように強制します。
私の質問は次のとおりです。間違いはありませんか? \newpage
ではなく\clearpage
を使用する場合。ただし、保留中のフロートを 望まない場合を除きます。フラッシュ? 2つのコマンドの定義を簡単に調べたところ(以下を参照)、常に\clearpage
を使用することに問題が潜んでいるかどうかはわかりません。
参照しやすいように、\newpage
の定義を以下に示します(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}
そしてここに\clearpage
の定義があります-\newpage
を呼び出すことに注意してください:
\def\clearpage{% \ifvmode \ifnum \@dbltopnum =\m@ne \ifdim \pagetotal <\topskip \hbox{}% \fi \fi \fi \newpage \write\m@ne{}% \vbox{}% \penalty -\@Mi }
回答
技術的には、 \newpage
の代わりに。ただし、2つのコマンドのセマンティクスは異なり、どちらのセマンティクスに関心があるかが問題になります。
まず、\clearpage
だけでなくページ(または2列モードの列)を終了しますが、さらに、延期されたすべてのフロートをフラッシュします。一見、それは良い考えかもしれませんが、次の状況を考慮してください。ページサイズのわずか1/3である1つのフロートが待機しています。ここで、\newpage
を使用して新しいページを開始すると、floatアルゴリズム(詳細についてはこのアルゴリズムの説明を参照)が実行されます。キックインして、待機フロートを次のページに配置しようとします(おそらく、待機フロートを次のページの上部領域に割り当てます。対照的に、\clearpage
もこのフロートを出力しますが、
したがって、チャプターの開始などの状況では、前のチャプターを\clearpage
で終了する(または新しいチャプターを開始する)ことをお勧めします。それを使用して)すべてのフロートをフラッシュしますが、他の状況では、フロートのみが表示されたかなり空のページが表示される場合があります。これは、望ましい場合と望ましくない場合があります。
2番目の違いはは実際には常に新しい「ページ」を開始しますが、\newpage
は実際には現在の列のみを終了します—これは2列モードの大きな違いです。次のことを試してください。違いを確認してください:
\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}
コメント
回答
私の意見では、「そうしない特別な理由がある」場合を除いて、どこでも。私にとってこの特別な理由は、あなたが(麻酔または何らかの理由で)本当に欲しがっているときです。
- 本当に空のページの場合、たとえば
\newpage\leavevmode\thispagestyle{empty}\newpage
- 特定のページなどに配置されたもの(
\clearpage
キューに入れられたフロートがたくさんある場合は、複数のページ区切りを追加できますが、\newpage
は1つだけ追加します) - 2ページをすぐ隣に置きたい場合お互い(チャプタータイトルがテキストなしで左側のページにあり、テキストが右側のページから始まる場合が好きです-次に、タイプの後に
\newpage
を使用します
確かに、これら2つのコマンドの使用法はすべて概念的なものである必要があります。つまり、作業のメインテキストで使用する必要はありません。マクロ定義(上記の\chapter
など)またはプリアンブル/ …
で使用します。
\newpage
または\clearpage
を使用することは、私の意見では本当に嫌われているので、慎重に行う必要があります。\newpage
の方が適切です。\newpage
が新しい列を強制するのに対し、\clearpage
は新しいページを強制します。