我知道我可以通过多种方式控制 LaTeX 中的行间距。命令如下\baselineskip
, \baselinestretch
,\linespread
在控制行间距时非常有用。每种方法都有自己的特点和使用情况,正如我们在这些讨论中发现的那样(A,乙,C)。
如果想要一个现成的解决方案来控制行距,可以使用以下软件包setspace
非常方便(内置命令如\onehalfspacing
或\setstretch
用于更精细的控制)。
无论如何,我的问题有点不同。我有一些文本(段落和列表模式),我想填满一页。为了使情况复杂化,它甚至可能包含方程式和图形。(让我们把浮点数放在一边。)
如果我想静态地解决这个问题,我所要做的就是调整某个\baselineskip
(或 \setstretch
)的值,直到满意为止。虽然这在大多数情况下都很有效,但当我想删除或添加一些文本时,我必须再次经历这个过程。
\baselineskip
是否 有可能有一个动态值,
\setstretch
以便我的文本始终填满一页?(肯定在合理的范围内。)
\vfill
另一个想法是在某些文本之间使用多个s。但我认为这种技术仅适用于封面。
我不会在这里提出 MWE。我认为那个不适用。
这个问题不是一个理论问题,我正在准备一些讲义,希望它能填满一页。
答案1
您可以添加可拉伸性\baselineskip
:
\documentclass{article}
\usepackage[pass,showframe]{geometry} % just to show the page is filled up
\usepackage{kantlipsum}
\newcommand{\addstretch}[1]{\addtolength{#1}{\fill}}
\flushbottom
\begin{document}
\addstretch{\baselineskip}
\addstretch{\abovedisplayskip}
\addstretch{\abovedisplayshortskip}
\addstretch{\belowdisplayskip}
\addstretch{\belowdisplayshortskip}
\setlength{\parskip}{0pt}
\kant*[1]
\begin{equation}
E=mc^2
\end{equation}
\kant[2-3]
\newpage
\kant*[1]
\begin{equation}
E=mc^2
\end{equation}
\kant[2]
\newpage
\end{document}
使用\fill
覆盖\vfil
插入的\newpage
。
创建onepage
环境很容易:
\newenvironment{onepage}
{\newpage\flushbottom
\addstretch{\baselineskip}
\addstretch{\abovedisplayskip}
\addstretch{\abovedisplayshortskip}
\addstretch{\belowdisplayskip}
\addstretch{\belowdisplayshortskip}
\setlength{\parskip}{0pt}}
{\newpage}
以下是带有环境的完整代码:
\documentclass{article}
\usepackage[pass,showframe]{geometry} % just to show the page is filled up
\usepackage{kantlipsum}
\newcommand{\addstretch}[1]{\addtolength{#1}{\fill}}
\newenvironment{onepage}
{\newpage\flushbottom
\addstretch{\baselineskip}
\addstretch{\abovedisplayskip}
\addstretch{\abovedisplayshortskip}
\addstretch{\belowdisplayskip}
\addstretch{\belowdisplayshortskip}
\setlength{\parskip}{0pt}}
{\newpage}
\begin{document}
\begin{onepage}
\kant*[1]
\begin{equation}
E=mc^2
\end{equation}
\kant[2-3]
\end{onepage}
\begin{onepage}
\kant*[1]
\begin{equation}
E=mc^2
\end{equation}
\kant[2]
\end{onepage}
\end{document}
答案2
希望@egreg 永远不要看到这个结果
\documentclass{article}
\def\a{one two three four five six}
\def\b{\a\a\a\a\a\par\a\a\a\a\a\a\a\a\a\a\a}
\flushbottom
\begin{document}
\setlength\baselineskip{\fill}
\setlength\lineskip{\fill}
\setlength\parskip{\fill}
\b\b
\end{document}
答案3
尝试这个例子:
\documentclass[a4paper]{article}
\usepackage{etoolbox,lipsum}
\patchcmd\newpage{\vfil}{}{}{}
\flushbottom
\begin{document}
\baselineskip \the\baselineskip plus .1pt
\lipsum[1]
\lipsum[2]
\end{document}
\flushbottom
使 LaTeX 填充页面至底部在分页符上. 需要对 进行修补\newpage
以使其也适用于单页文档。
的修改\baselineskip
可能不够优雅,并且会在字体切换时消失。您可能比我更了解如何正确修改它。
请注意,\parskip
具有1pt
可拉伸性,因此行间空间可拉伸至段落间空间的 1/10。
答案4
做成\baselineskip
可拉伸的有点过了,而且印刷不良除非您只生成一个页面。如果您有多个页面,灵活的基线跳过将改变页面上的黑色量,即使是很小的更改,也会让人觉得不舒服。
您可以\vfill
在任何情况下使用,但我建议尽可能轻松地使用:\flushbottom
将确保底部对齐的文本,抑制\vfil
插入到页面底部的文本,让您可以自由使用\vfil
自己的垂直空间(或使用类似的表达式进行更精细的控制10pt plus 1fil
)。
我建议您确定内容中可以添加一点拉伸的所有位置,并在每个位置安排一个\vfil
。这样,常规的行间空间(\baselineskip
)就可以保持不变。列表等已经引入了可拉伸空间,但您可能需要对其进行调整,以使空白均匀分布。