如何忽略方程环境之前、之后和内部的空行?

如何忽略方程环境之前、之后和内部的空行?

我想要一个不关心空行的方程式环境。通常,方程式前后的空行会开始一个新段落,从而导致显示方程式周围出现额外的垂直间距。方程式环境中的空行会导致编译错误:

Text above
                    % <- Empty line causes additional spacing
\begin{equation}
\begin{aligned}
                    % <- Empty line causes error
x &= y \\
                    % <- Empty line causes error
y &= z
                    % <- Empty line causes error
\end{aligned}
\end{equation}
                    % <- Empty line causes additional spacing
Text below

答案1

解决方案:

  • 之前有空行。一旦 LateX 处理了它,\par它就不能被删除。相反,我们检查是否处于新段落的开头\ifvmode,然后将 parskip 设置为零,并用负空间补偿上面的空行。

  • 之后为空行。 我们可以\par使用 来防止在环境之后写入\@gobble\par,这会忽略可能跟在方程式环境后面的空格和换行符。有关更多详细信息,请参阅这个答案

  • 內容中有空行。为了隐藏 amsmath 中的空行,我们更改\endlinechar 到空格字符。否则这不会影响方程,因为在数学模式下空格会被忽略。我不确定为什么需要嵌套命令,但它确实有效。

例子:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xpatch}
\usepackage{lipsum}

\xapptocmd\normalsize{%
\abovedisplayskip=.8em plus .2em minus .2em
\belowdisplayskip=.6em plus .1em minus .1em
\abovedisplayshortskip=.8em plus .2em minus .2em
\belowdisplayshortskip=.6em plus .1em minus .1em
}{}{}

\makeatletter
\newcommand{\removeParBefore}{\ifvmode\vspace*{-\baselineskip}\setlength{\parskip}{0ex}\fi}
\newcommand{\removeParAfter}{\@ifnextchar\par\@gobble\relax}
\newcommand{\eq}{\begingroup\removeParBefore\endlinechar=32 \eqinner}
\newcommand{\eqinner}[1]{\endlinechar=32%
\begin{equation}\begin{aligned}#1\end{aligned}\end{equation}\endgroup\removeParAfter}
\makeatother

\begin{document}

\lipsum[2]

\eq{

x &= y \\


y &= z

}


\lipsum[2]

\end{document}

删除空格的方程环境

相关内容