命令\newpage
和\clearpage
都强制分页。此外,后一个命令还会从堆栈中“刷新”所有待处理的浮点数,即强制从分页符后的页面开始排版它们。
我的问题是:使用\clearpage
而不是是否有错误\newpage
,除非在某些情况下不是想要刷新任何待处理的浮点数吗?通过对这两个命令的定义(见下文)的随意检查,我无法判断总是使用 是否存在任何问题\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
}
答案1
\clearpage
从技术上讲,使用而不是并没有错\newpage
。但是,这两个命令具有不同的语义,问题是您对哪种语义感兴趣。
首先,正如您已经提到的,\clearpage
它不仅会结束页面,还会清除所有已延迟的浮动。从表面上看,这可能是一个好主意,但请考虑以下情况:您有一个浮动在等待,它只是页面大小的 1/3。现在您\newpage
开始一个新页面,然后浮动算法(有关详细信息,请参阅该算法的描述)将启动并尝试将等待的浮动元素放置到下一页(并且最有可能将等待的浮动元素分配到下一页的顶部区域。相反,\clearpage
也会输出这个浮动元素,但在它自己的页面上。
因此,在章节开始的情况下,建议结尾上一章\clearpage
(或者更确切地说开始您可以使用一个新页面(其中包含新的页面)来清除所有浮动元素,但在其他情况下,这可能会导致相当空白的页面,其中只有浮动元素,这可能是也可能不是想要的。
第二个区别是,它\clearpage
实际上总是开始一个新的“页面”,而\newpage
实际上只结束当前列 - 这是双列模式下的一个巨大区别。只需尝试以下操作即可看到区别:
\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}
答案2
我认为,你可以\clearpage
在任何地方使用,除非“有特殊原因不这样做”。对我来说,这个特殊原因是当你(出于审美或其他原因)真的想要拥有:
- 一个真正空白的页面,然后你调用例如
\newpage\leavevmode\thispagestyle{empty}\newpage
- 放置在特定页面上的内容或其他内容(
\clearpage
如果排队的浮动元素很多,则可能会添加多个分页符,而\newpage
仅添加一个) - 当您希望两页彼此相邻时(我喜欢章节标题在左页而没有文本,而文本从右页开始 - 然后我
\newpage
在排版章节标题后使用)。
当然,这两个命令的所有用法都应该是概念性的,我的意思是,您不需要在作品的正文中使用它们,而是在宏定义(如我\chapter
上面提到的)或在序言/...中使用它们。