当文本包含枚举时,页面中的文本垂直居中

当文本包含枚举时,页面中的文本垂直居中

当字母长度少于一页时,我希望字母在信头下方垂直居中。当字母长度超过一页时,我希望字母和信头之间的间距最小。

文件的格式如下:

[信头]
- 前导空格 -
[文本]
- 尾随空格 -

我考虑添加\vfill前导空格和尾随空格。这似乎可以实现我对一页字母的要求。但是,当文档长度超过一页时,前导空格就太大了 - 尤其是当enumerate文本中有环境时。

我将非常感激大家关于如何实现长信和短信(一页)的垂直间距的想法和建议。

请注意,这类似于将文本置于页面中央,但我不是在写诗。首先,我在使用该类memoir,其次,我也不是在写诗 —— 这似乎使得该verse包不合适。

我还注意到,该letter包装实现了这种间距,尽管我承认我看了该包装但不明白它是如何做到的。

编辑:该问题似乎与有关enumerate。示例代码如下:

\documentclass[oneside,11pt]{memoir}
\usepackage{lipsum}
\begin{document}
\lipsum[1] % Letterhead

 \begin{vplace}
 \lipsum[2] % Text
  \begin{enumerate}[1.] % more Text (albeit enumerated)
    \item{}abc
    \item{}ghi
  \end{enumerate}\par 
 \lipsum[3-6] % more Text
 \end{vplace}
\end{document}

如果删除枚举列表,则排版的垂直间距会如预期一样。但是,使用枚举列表时,信头和文本第一段之间会有一个非常奇怪且很大的间距。

是什么原因导致空间过大?是否可以消除它(不删除枚举内容)。

答案1

这有帮助吗?

\documentclass[oneside,11pt]{memoir}
\usepackage{lipsum}
\begin{document}
\lipsum[1] % Letterhead

 \begin{vplace}
 \lipsum[2] % Text

\bigskip\noindent
    \begin{minipage}{\linewidth}
    \begin{enumerate}[1.] % more Text (albeit enumerated)
    \item{}abc
    \item{}ghi
  \end{enumerate}
\end{minipage}  \par\bigskip
 \lipsum[3-6] % more Text
 \end{vplace}
\end{document}

答案2

这个问题很有趣。在某个enumerate环境之后,LaTeX 会设置一个负垂直惩罚 (-51),这是一个很好的分页点。当列表后面的段落完成后,TeX 会继续检查在哪里分页(它练习页面构建器,用 TeXbook 的术语来说)。

由于那个负惩罚,在列表之后恰好可以找到“最低成本断点”:\vspace*{\stretch{1}}环境vplace提供必要的垂直空间。

的文件回忆录class 并没有明确说明这一点,但vplace应该只用于适合页面的对象:它只是在对象前后添加了无限可拉伸的空间。事实上,它的定义是

\newenvironment{vplace}[1][1]
  {\par\vspace*{\stretch{#1}}}
  {\vspace*{\stretch{1}}\par}

这不是你想要的。

笔记
-51 惩罚来自于 的代码\endtrivlist,其中说\@endparenv,反过来又\addpenalty\@endparpenalty\@endparpenalty设置为-\@lowpenalty\@lowpenalty=51

相关内容