当字母长度少于一页时,我希望字母在信头下方垂直居中。当字母长度超过一页时,我希望字母和信头之间的间距最小。
文件的格式如下:
[信头]
- 前导空格 -
[文本]
- 尾随空格 -
我考虑添加\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
。