使用 @texttop 和 @textbottom 垂直居中页面

使用 @texttop 和 @textbottom 垂直居中页面

我正在尝试使用\@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\relax0.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}

相关内容