![为什么部分标题默认不是垂直居中?](https://linux22.com/image/473775/%E4%B8%BA%E4%BB%80%E4%B9%88%E9%83%A8%E5%88%86%E6%A0%87%E9%A2%98%E9%BB%98%E8%AE%A4%E4%B8%8D%E6%98%AF%E5%9E%82%E7%9B%B4%E5%B1%85%E4%B8%AD%EF%BC%9F.png)
\part
第一次使用该命令时\documentclass
书,我意识到该部分的标题没有垂直居中,并且在页面上的位置比“应该”的位置高。使用此 MWE,我在页面顶部有大约 60 毫米的垂直空间,在底部有 113 毫米的垂直空间,即几乎翻倍。
\documentclass{book}
\usepackage[showframe]{geometry}
\setlength\topskip{0pt}
\begin{document}
\part{My first part}
\end{document}
查看它们的定义后,可以使用下面这个简单的 MWE 来模仿\part
和\@endpart
命令(就垂直对齐而言)。
\documentclass{book}
\usepackage[showframe]{geometry}
\setlength\topskip{0pt}
\begin{document}
\null\vfil
A\par
\vskip 20pt
A\par
\vfil
\end{document}
为什么部分标题没有垂直居中?哪些元素将标题“推”到页面顶部?
我意识到,如果我将 替换\vfil
为\vfill
,它比 更“强大” \vfil
,我就会得到一个在页面上垂直居中的标题(下面的图片和 MWE)。为什么这不是默认行为?
\documentclass{book}
\usepackage[showframe]{geometry}
\setlength\topskip{0pt}
\begin{document}
\null\vfill
A\par
\vskip 20pt
A\par
\vfill
\end{document}
答案1
部分页面强制使用强制分页符,在您的示例中,由\end{document}
which does \clearpage
which does 执行\newpage
。
newpage
是
\def \newpage {%
\if@noskipsec
\ifx \@nodocument\relax
\leavevmode
\global \@noskipsecfalse
\fi
\fi
\if@inlabel
\leavevmode
\global \@inlabelfalse
\fi
\if@nobreak \@nobreakfalse \everypar{}\fi
\par
\ifdim\prevdepth>\z@
\vskip -%
\ifdim\prevdepth>\maxdepth
\maxdepth
\else
\prevdepth
\fi
\fi
\vfil
\penalty -\@M}
因此它增加了\vfil
允许强制页面变短的功能。
因此,您的示例中有一个\vfil
位于文本上方,两个位于文本下方,因此位于页面下方的三分之一处。
这在标准类中没有明确记录(这些类中的大多数设计决策都没有)但它似乎是设计使然。