如果不是唯一的行,如何使文本垂直居中?

如果不是唯一的行,如何使文本垂直居中?

\vspace*{\fill}如果只有一行,效果很好。假设我有以下文本:

1. This is the first line.
2. Some random text here.
3. This has to be centered.
4. Last line.

如果我将其放在\vspace*{\fill}第三行之前和之后,它将位于第二行和第四行之间。我需要从顶部到底部的垂直空间,而不是最后一行和下一行之间的垂直空间。

答案1

我认为你可以玩 parboxes。

在我的示例的第二页上(第一页仅用于比较),您会发现三个高度相同但内容对齐方式不同的 parbox(顶部、中心、底部)。

在第三页上,您会发现两个高度相同且顶部和底部对齐的 parbox(页面的第一个和最后一个),中间有一些被\vspace*{\fill}s 包围的文本。

如果这不能解决您的问题,请编辑您的问题并添加最小工作示例(MWE)

\documentclass{article} 

\begin{document}
\noindent This is for comparison.
\vspace*{\fill} 

\noindent This has to be centered.
\vspace*{\fill} 

\noindent Last line.
\newpage
% three parboxes of the same height with different content alignment
\noindent\parbox[][.333\textheight][t]{\linewidth}{This is the first line. 

Some random text here.

Some other random text here.

Some other random text here.}
\noindent\parbox[][.333\textheight][c]{\linewidth}{This has to be centered.} 
\noindent\parbox[][.333\textheight][b]{\linewidth}{Last line.}
\newpage
% two parboxes of the same height with different content alignment with some text between them
\noindent\parbox[][.4\textheight][t]{\linewidth}{This is the first line. 

Some random text here.

Some other random text here.

Some other random text here.}
\vspace*{\fill} 

\noindent This has to be centered.
\vspace*{\fill} 

\noindent\parbox[][.4\textheight][b]{\linewidth}{Last line.}
\end{document}

在此处输入图片描述

答案2

使用零高度框。无需猜测任何长度。

\documentclass{article}
\usepackage{lipsum,showframe} % just for the example

\newenvironment{zerotext}[1]
 {\dimen0=\parindent
  \par\noindent
  \begin{minipage}[#1][0pt]{\textwidth}
  \parindent=\dimen0}
 {\end{minipage}}


\begin{document}

\begin{zerotext}{t}
\lipsum[2]
\end{zerotext}

\vfill

\lipsum[4]

\vfill

\begin{zerotext}{b}
\lipsum[5]
\end{zerotext}

\end{document}

在此处输入图片描述

相关内容