方程式和双倍行距

方程式和双倍行距

如果文档(任何类别)是双倍行距,那么如何重新定义居中方程式周围的间距,就像单倍行距一样?每当我使用双倍行距时,我都觉得居中方程式前后的间距太大。

答案1

如果您使用setspace包来更改为双倍间距,则可以使用etoolbox包及其\BeforeBeginEnvironment和在显示方程式的环境之前和之后\AfterEndEnvironment附加。 以下示例说明了和环境的这种方法(必须对其他环境及其带星号的版本进行类似的声明):\begin{singlespace}\end{singlespace}equationalign

\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>从而缩小间隙。这就是为什么最终的页数较低。

非常感谢大卫·卡莱尔为了向我解释发生了什么事

相关内容