\hfil 和 \hfill 之间的区别

\hfil 和 \hfill 之间的区别

我试图理解\hfil和之间的区别\hfill。我一直认为这些命令大致相同,只是\hfill比 更“强大” \hfil。因此,我认为我可以使用以下任一行将一行文本居中:

\hfil Horizontally centred \hfil

\hfill Horizontally centred \hfill

事实证明,只有第一个片段实际上使文本水平居中,但我不明白为什么。

\vfil和 也存在类似的问题\vfill。我的理解是\vfill可以定义为\vspace{\fill},因此不能使用垂直居中一些文本

\vfill Vertically centered \vfill

因为\vspace在页面顶部被忽略。出于同样的原因,

\vspace*{\fill} Vertically centred\vfill

应该可以工作,而且确实如此,尽管不是非常完美。类似地,您可以使用\hspace*{\fill}水平居中文本。

\hfil有人能清楚地解释和之间\hfill以及\vfil和之间的区别吗\vfill?我知道这篇文章“fil” 和 “fill” 有什么区别?但这对我没有帮助。

为了了解发生了什么,我创建了以下 MWE:

\documentclass{article}
\usepackage[paperheight=40mm, paperwidth=80mm,showframe]{geometry}
\parindent=0pt
\begin{document}

  \hfil Horizontally centred \hfil

  \hfill Horizontally centred \hfill

  \hspace*{\fill} Horizontally centred \hfill

  \hfill Horizontally centred \hspace*{\fill}

  \hfil Horizontally centred \hspace*{\fill}

  \newpage

  \vfil Vertically centred\vfil

  \newpage

  \vfill Vertically centred\vfill

  \newpage

  \vspace*{\fill} Vertically centred\vfill

\end{document}

生成四个页面:

在此处输入图片描述

当然,我知道我可以用以下方式居中文本

\centerline{Horizontally centred}

\begin{center}Horizontally centred\end{center}

但这不是我要问的......虽然我不确信我知道垂直居中文本的最佳方法!

答案1

第一种情况: \hfil Horizontally centred \hfil\par(空白行添加\par)。

\par被处理时,TeX 做的第一件事是\unskip,然后它添加一个非常高的惩罚,所以下一个添加的粘连\hskip\parfillskip不会被移除。由于 的默认值\parfillskip0pt plus 1fil,所以你会得到居中。几乎,因为在“centered”后面有一个空格没有被移除。

第二种情况: \hfill text\hfill\par(空白行添加\par)。

这与以前一样有效,但现在\parfillskip胶水已被杀死\hfill

第三种情况和第二个基本相同。

第四种情况\hfill Horizontally centred \hspace*{\fill}几乎使文本居中(记住“居中”后面的空格),因为\unskip没有移除\hspace*{\fill}(它内部以另一团胶水结束,只是为了这个),因为\parfillskip胶水被杀死了。

第五起案件\hfil两侧的胶水(\parfillskip分别为显式和提供)均被杀死\hspace*{\fill}

如何实现居中?

\par{\centering Horizontally centred\par}

对于垂直居中,

  1. 你必须消除\topskip胶水和基线跳过顶部和底部的胶水
  2. \vspace*{\fill}在顶部使用,在底部使用\vfill(或更对称的)。\vspace*{\fill}
\documentclass{article}
\usepackage[paperheight=40mm, paperwidth=80mm,showframe]{geometry}

\setlength{\parindent}{0pt}

\begin{document}

\vspace*{-\topskip}
\vspace*{\fill}
\nointerlineskip
Vertically centred\par
\nointerlineskip
\vfill

\end{document}

在此处输入图片描述

相关内容