对齐时单行和多行文本之间的间距不同

对齐时单行和多行文本之间的间距不同

我目前在排版环境时遇到一个问题align。我有一个相对较长的方程式列表,它们应该全部以单个字符为中心,但我希望在方程式之间插入文本,因此我使用了intertext。由于我的大学强迫我使用 1.5 倍行距,所以我使用\usepackage[onehalfspacing]{setspace}它。

问题出现的是,根据我的是否\intertext有一行或多行,文本前的最后一个等式和文本本身之间的垂直距离似乎发生了变化。

这似乎是我使用的行距函数。如果没有行距命令,差异几乎可以忽略不计。使用\usepackage[onehalfspacing]{setspace}\linespread{1.22},它们对于文本大致相同,从方程式基线到 第一行的基线,差异上升到 21% intertext

是否有其他命令可以引入 1.5 倍行距,而不会根据行数改变间距intertext? 有什么方法可以强制垂直跳跃相等吗?

我曾经xpatch将其修补\xxxdisplay(short)skip为极低的值以更好地显示间距的差异。

使用两个\intertexts 表示多行文本,公式和文本之间的间距是正确的,但是有一个巨大的两行文本之间的间隙。

梅威瑟:

\documentclass{scrreprt}

\usepackage{mathtools}
\usepackage{lipsum}
\usepackage{xpatch}
\xapptocmd\normalsize{%
 \abovedisplayskip=-5pt
 \abovedisplayshortskip=-5pt
\belowdisplayskip=-5pt
 \belowdisplayshortskip=-5pt
}{}{}

\usepackage[onehalfspacing]{setspace}
%\linespread{1.22}

\begin{document}
\lipsum[1]
\begin{align*}
1 &= 1 \\
1 &= 1
\intertext{short intertext which will only span over one line}
1 &= 1 \\
1 &= 1 
\intertext{longer intertext which will span more than one line demonstrating the vertical spacing issue adequately}
1 &= 1 \\
1 &= 1
\end{align*}
\end{document}

答案1

您不希望跳过显示的值,而是希望nodisplayskipstretch选择setspace。您可以在\intertext和之间进行选择\shortintertext

\documentclass{scrreprt}

\usepackage{mathtools}

\usepackage[onehalfspacing,nodisplayskipstretch]{setspace}

\begin{document}

Some text which spans more than one line just to show
what happens; we want it to be quite long, so the line
above the display is not short
\begin{align*}
1 &= 1 \\
1 &= 1
\intertext{short intertext which will only span over one line}
1 &= 1 \\
1 &= 1 
\intertext{longer intertext which will span more than one line demonstrating the vertical spacing issue adequately}
1 &= 1 \\
1 &= 1
\end{align*}
Some text which spans more than one line just to show
what happens; we want it to be quite long, so the line
above the display is not short
\begin{align*}
1 &= 1 \\
1 &= 1
\shortintertext{short intertext which will only span over one line}
1 &= 1 \\
1 &= 1 
\shortintertext{longer intertext which will span more than one line demonstrating the vertical spacing issue adequately}
1 &= 1 \\
1 &= 1
\end{align*}

\end{document}

在此处输入图片描述

答案2

我找到了一种缓解此问题的方法 - 不使用\intertext

使用\noalign{\noindent foobar}均匀垂直间距的结果,与行数无关。

然而,这有一个缺点:\intertext减少换行后的行距,大概是为了更好地表明文本属于一起。我认为这也是第一行上方间距改变的原因。这仅在使用打印多行时发生\intertext,并解释了为什么手动增加行距时问题会变得更糟。

现在很有趣的是,想知道是否有办法在 期间改变行距noalign,但同样只能在行之间改变,而不是在行之前。

\\MWE 具有固定的垂直间距,但在“文本间”中没有减小的行间距。请注意换行符之前的附加项,否则misplaced \noalign会抛出一个,因为您会尝试\noalign使用对齐字符来输入方程式&

\documentclass{scrreprt}

\usepackage{mathtools}
\usepackage{lipsum}
\usepackage{xpatch}
\xapptocmd\normalsize{%
    \abovedisplayskip=-5pt
    \abovedisplayshortskip=-5pt
    \belowdisplayskip=-5pt
    \belowdisplayshortskip=-5pt
}{}{}

\usepackage[onehalfspacing]{setspace}
%\linespread{1.22}

\begin{document}
\lipsum[1]
\begin{align*}
1 &= 1 \\
1 &= 1 \\
\noalign{\noindent short intertext which will only span over one line}
1 &= 1 \\
1 &= 1 \\
\noalign{\noindent longer intertext which will span more than one line demonstrating the fixed vertical spacing issue adequately}
1 &= 1 \\
1 &= 1
\end{align*}
\end{document}

相关内容