如果文档(任何类别)是双倍行距,那么如何重新定义居中方程式周围的间距,就像单倍行距一样?每当我使用双倍行距时,我都觉得居中方程式前后的间距太大。
答案1
如果您使用setspace
包来更改为双倍间距,则可以使用etoolbox
包及其\BeforeBeginEnvironment
和在显示方程式的环境之前和之后\AfterEndEnvironment
附加。 以下示例说明了和环境的这种方法(必须对其他环境及其带星号的版本进行类似的声明):\begin{singlespace}
\end{singlespace}
equation
align
\documentclass{article}
\usepackage{amsmath}
\usepackage{setspace}
\usepackage{etoolbox}
\usepackage{lipsum}% just to generate text for the example
\BeforeBeginEnvironment{equation}{\begin{singlespace}}
\AfterEndEnvironment{equation}{\end{singlespace}\noindent\ignorespaces}
\BeforeBeginEnvironment{align}{\begin{singlespace}}
\AfterEndEnvironment{align}{\end{singlespace}\noindent\ignorespaces}
\doublespacing
\begin{document}
\lipsum[2]
\begin{equation}
a=b.
\end{equation}
\lipsum[2]
\end{document}
答案2
您可以简单地设置包nodisplayskipstretch
的选项setspace
,即写入
\usepackage[nodisplayskipstretch]{setspace}
在序言中。此解决方案的一个优点是它自动适用于全部display-math 环境。(附言:在下面的 MWE 中,该\namdui
命令用于生成一些填充文本 - 具体来说,是包文本第二节的前几个句子lipsum
。)
\documentclass{article}
\usepackage[nodisplayskipstretch]{setspace}
\newcommand{\namdui}{Nam dui ligula, fringilla a, euismod sodales,
sollicitudin vel, wisi. Morbi auctor lorem non justo. Nam lacus libero,
pretium at, lobortis vitae, ultricies et, tellus.} % filler text
\doublespacing
\begin{document}
\namdui
\begin{equation}
a=b.
\end{equation}
\namdui
\end{document}
答案3
setspace
与使用nodisplayskipstretch
或相比,可能更好的替代方案etoolbox
是使用setspace
如下方法:
\usepackage{setspace}\setdisplayskipstretch{}
这通常会使文档更紧凑。例如,以下代码会生成一个包含 77 页的文档:
\documentclass[a4paper]{article} % For a consistent page count, specify a paper size.
\usepackage{setspace}\setdisplayskipstretch{}
\doublespacing
\usepackage{blindtext} % Introduces the "Lorem ipsum..." filler text command \blindtext
\usepackage{pgffor} % Introduces the \foreach command
\begin{document}
\foreach \n in {1,...,200}{ % repeat 200 times
\begin{equation}
a=b.
\end{equation}
\blindtext % "Lorem ipusm..." filler text
}
\end{document}
相比之下,各种可能的命令对应的页数setspace
为:
╔════════════╦════════════════════════════════════════════════════╗
║ Page count ║ setspace command ║
╠════════════╬════════════════════════════════════════════════════╣
║ 77 ║ \usepackage{setspace}\setdisplayskipstretch{} ║
║ 80 ║ Gonzalo Medina's answer using etoolbox ║
║ 81 ║ \usepackage[nodisplayskipstretch]{setspace} ║
║ 86 ║ \usepackage{setspace} ║
║ 93 ║ \renewcommand{\baselinestretch}{2} % (no setspace) ║
╚════════════╩════════════════════════════════════════════════════╝
解释
我将\usepackage{setspace}\setdisplayskipstretch{}
与……进行对比\usepackage[nodisplayskipstretch]{setspace}
。setspace.sty
,我们看到以下相关行:
\newcommand{\displayskipstretch}{\baselinestretch}
\newcommand{\setdisplayskipstretch}[1]{\renewcommand{\displayskipstretch}{#1}}
\DeclareOption{nodisplayskipstretch}{\setdisplayskipstretch{1.0}}
\everydisplay\expandafter{%
\the\everydisplay
\abovedisplayskip \displayskipstretch\abovedisplayskip
\belowdisplayskip \displayskipstretch\belowdisplayskip
\abovedisplayshortskip \displayskipstretch\abovedisplayshortskip
\belowdisplayshortskip \displayskipstretch\belowdisplayshortskip
}
因此,该选项nodisplayskipstretch
相当于设置因子\displayskipstretch=1.0
。有人可能认为乘以 1 不会产生任何效果,但 TeX 当然不是那么简单。;) 命令displayskip
类型<glue>
,这意味着它们包含一个称为“拉伸和收缩”的 ± 范围。 乘以 1 可消除拉伸和收缩, 因为它转换<glue>
为<dimen>
。因此,setspace
通常会破坏 TeX 内置的灵活性,从而缩小方程式上方和下方的间隙。该\setdisplayskipstretch{}
命令会阻止乘法,保留 ,<glue>
从而缩小间隙。这就是为什么最终的页数较低。
非常感谢大卫·卡莱尔为了向我解释发生了什么事。