我正在尝试使用\@texttop
并\@textbottom
以类似的方式垂直居中页面使用 \@texttop 和 \@textbottom 进行垂直定位.如果我这样做,一切都会顺利
\documentclass{minimal}
\makeatletter
\def\@texttop{\vskip \z@ plus 1fill\relax}
\def\@textbottom{\vskip \z@ plus 1fill\relax}
\makeatother
\begin{document}
hello world
\end{document}
但如果我切换到类似或 之类\vskip \z@ plus 1fill\relax
的东西,页面就不再居中了。我猜一定是有某个 el stretch 偷偷潜入了我的 MWE 中的某个地方,但我不知道在哪里。为什么 el stretch 没有居中页面?\vskip \z@ plus 0.5\textheight\relax
\vskip \z@ plus 0.1fil\relax
0.5\textheight
答案1
如果你修改你的例子
\documentclass{minimal}
\showoutput
\showboxdepth=3
\makeatletter
\parfillskip3\p@
\def\@texttop{\vskip \z@ plus 2fil\relax}
\def\@textbottom{\vskip \z@ plus 2fil\relax}
\makeatother
\begin{document}
hello world
\end{document}
你看到有胶水:
ompleted box being shipped out [1]
\vbox(578.15999+0.0)x469.75499
.\glue 0.0
.\vbox(578.15999+0.0)x469.75499
..\vbox(0.0+0.0)x469.75499
...\glue 0.0 plus 1.0fil
...\hbox(0.0+0.0)x469.75499
..\glue 0.0
..\glue(\lineskip) 0.0
..\vbox(578.15999+0.0)x469.75499, glue set 113.632fil
...\glue 0.0 plus 2.0fil
...\glue(\topskip) 3.05556
...\hbox(6.94444+0.0)x469.75499, glue set 239.2044 []
...\glue 0.0 plus 1.0fil<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
...\glue 0.0
...\glue 0.0 plus 2.0fil
..\glue(\baselineskip) 0.0
..\hbox(0.0+0.0)x469.75499
这实际上来自\newpage
于\clearpage
\end{document}
\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}