\baselinestretch
我有一份使用设置行距起草的文档。为了防止脚注中出现多余的间距,我正在尝试切换到该setspace
包。
由于最终结果应该是压缩脚注,我预计页数会减少或保持不变。奇怪的是,它增加了。部分问题是显示方程式周围的垂直间距增加。我能够使用该选项来防止这种情况nodisplayskipstretch
。
剩下的问题似乎与分页行为的变化有关,如以下 MWE 所示:
\documentclass[11pt,a4paper]{article}
%%%%%%%%%
% EITHER
%%%%%%%%%
\renewcommand{\baselinestretch}{1.3}
%%%%%%%%%
% OR
%%%%%%%%%
\usepackage[nodisplayskipstretch]{setspace}
\setstretch{1.3}
%%%%%%%%%
\usepackage{blindtext}
\begin{document}
\newcommand{\myeqn}{
\begin{equation}
a \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad b
\end{equation}
}
\blindtext \footnote{A footnote}
\myeqn
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobor-
tis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent
imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lec-
tus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus
nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Prae-
sent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. \footnote{Yet another}
\myeqn
\blindtext \footnote{One too many.}
\myeqn
\end{document}
使用baselinestretch
,所有三个脚注都可以放在第一页,尽管脚注的行距为 1.3 倍:
另一方面,setspace
尽管脚注的行距只有 1x,但页面会更早地断行:
为什么会发生这种情况?我该如何解决?
编辑:
经过一番修改setspace.sty
,我发现以下几行是负责任的:
% GT: EMSH chose to omit display math part that follows.
% She wrote (see above) that the "altered spacing before and after displayed
% equations ... just looked too much".
%
% Fix up spacing before and after displayed math
% (arraystretch seems to do a fine job for inside LaTeX displayed math,
% since array and eqnarray seem to be affected as expected).
% Changing \baselinestretch and doing a font change also works if done here,
% but then you have to change @setsize to remove the call to @nomath)
%
% GT: The \belowdisplayskip line was mistyped; now fixed, courtesy of
% David Hull.
%
% GT: Brett Parnell has addressed EMSH's concern by replacing
% \baselinestretch by \displayskipstretch in displays, as follows.
\everydisplay\expandafter{%
\the\everydisplay
\abovedisplayskip \displayskipstretch\abovedisplayskip
\belowdisplayskip \displayskipstretch\belowdisplayskip
\abovedisplayshortskip \displayskipstretch\abovedisplayshortskip
\belowdisplayshortskip \displayskipstretch\belowdisplayshortskip
}
我本以为这段代码不会执行任何操作,因为 的定义nodisplayskipstretch
是\setdisplayskipstretch{1.0}
,但实验证明事实并非如此。因此,我相信我可以通过恢复\everydisplay
加载后的定义来解决这个问题setspace.sty
。有人能解释一下怎么做吗?
答案1
在 GitHub 上,David Carlisle 提出了以下建议:
\usepackage{setspace}
\setdisplayskipstretch{}
\setstretch{1.3}
作为参考,我有一个非最小示例,其中\setdisplayskipstretch{}
行的长度从 100 页减少到 97 页。
我在这里写的两个答案都产生了像素相同的结果。因此,我保留这两个答案,但将这个答案标记为已接受。
答案2
以下代码似乎可以通过我在问题的编辑中建议的解决方案来实现我想要的效果:
\edef\oldeverydisplay{\the\everydisplay}
\usepackage[nodisplayskipstretch]{setspace}
\everydisplay\expandafter{\oldeverydisplay}
\setstretch{1.3}
setspace
具体来说,这个代码块应该替换MWE 中的两行。
我将非常感激任何关于此的反馈。(我不太熟悉像 这样的令牌参数\everydisplay
,所以也许这不是做事的“正确”方式。)我还想知道这是否是 中的一个错误setspace
。