使用 \vspace*{\fill} 将文本垂直居中 - 在页面顶部留出更多空间

使用 \vspace*{\fill} 将文本垂直居中 - 在页面顶部留出更多空间

我想让文本在页面上垂直和水平居中。我从这里获取了答案https://tex.stackexchange.com/a/2327/110351并创建了以下文档:

\documentclass[pagesize=auto, paper=102mm:51mm, paper=landscape]{scrartcl}

\usepackage[margin=3mm]{geometry}

\begin{document}%
  \pagestyle{empty}%
  \setlength{\parindent}{0pt}%
  \setlength{\topskip}{0pt}%      
  \vspace*{\fill}%
  \begin{center}
    Test

    More tests

    More tests
  \end{center}
  \vspace*{\fill}%
\end{document}

这样,页面顶部的空间就比底部的空间大,也就是说,文本的位置比需要的要低。

输出

我怎样才能解决这个问题?

编辑:这可能与文本或字体有关吗?当我突出显示文本时,字母上方的框比字母下方的框大。因此,文本可能看起来没有垂直居中,但实际上却是垂直居中的。

答案1

在良好的排版中,页面上两行连续文本之间的距离不应取决于它们包含的字母的高度(当然,这不仅仅适用于良好的排版!)。因此,(La)TeX 将它们的基线放置在固定距离(例如,12 点,或约 4.2 毫米),与内部字形的实际高度无关。这样,就有足够的空间\big在一行中包含一个包含指数或括号的数学公式,而无需垂直移动它。

TeX 通过一种称为“行间粘连”的砂浆来实现此行为,该砂浆插入连续的文本行之间。在 的实现中\vspace*,特别注意不要影响行间粘连的插入方式:这通常是正确的,但在您的情况下,它会产生副作用,即第一行文本的位置会比实际高。这可能是也可能不是您想要的:如果不是,您可以简单地发出命令来抵消它\nointerlineskip,这会抑制通常会在紧随其后的行之前插入的行间粘连。

请注意,在 LaTeX 的实现中\vspace*,“行间粘合”机制覆盖了“\topskip粘合”装置。更准确地说,\vspace*添加了一条不可见的水平线,以防止其插入的空格在分页符处消失:现在,设置\topskip为零可防止插入不需要的垂直空格多于这条不可见的规则;另一方面,发出该\nonterlineskip命令会阻止添加行间粘连(以及它所占用的垂直空间)以下同样的规则。所以,对于你的情况,你需要两个都

梅威瑟:

\documentclass[pagesize=auto, paper=102mm:49mm, paper=landscape]{scrartcl}
\usepackage[margin=3mm]{geometry}

% \showoutput

\begin{document}
  \pagestyle{empty}
  \setlength{\parindent}{0pt}
  \setlength{\topskip}{0pt}
  \nointerlineskip
  \setlength{\parskip}{0pt}
  \vspace*{\fill}
  % \showthe\prevdepth
  \begin{center}
    Test

    More tests

    More tests

    More tests

    More tests

    More tests

    More tests

    Test
  \end{center}
  \vspace*{\fill}
\end{document}

在这种情况下,设置\parskip为零不是必需的,但在其他情况下可能很重要。取消注释注释行以查看一些诊断消息。

相关内容