我有几篇文档,希望减少其中多余的空格,并希望重新定义对齐以默认包含 mathtools 中的 SwapAboveDisplaySkip。由于我想在几乎所有地方使用它,所以我宁愿不必手动在每个地方都包含它。
目前我有以下内容,它可以完成我想要的工作,除了新的环境而不是对齐,这本质上只是这里的解决方案:定义自定义 align 和 align* 环境
\documentclass{article}
\usepackage{amsmath, mathtools}
\makeatletter
\newenvironment{salign}
{\par\align \SwapAboveDisplaySkip}
{\endalign}
\newenvironment{salign*}
{\par
\start@align\@ne\st@rredtrue\m@ne}
{\endalign}
\makeatother
\begin{document}
\section{Foo}
\begin{salign}
a^2+b^2 & = c^2
\end{salign}
\end{document}
我不想使用这个,因为我需要定义额外的文件以便我的编辑器的语法高亮显示有效,这意味着代码将不可移植。
用 renewenvironment 替换会创建一个递归循环,我也试图\let\oldalign\align
修复这个问题,但无法编译。
答案1
您可以使用\AtBeginEnvironment
frometoolbox
和\useshortskip
from获得您想要的内容nccmath
(在 之前加载mathtools
):
\documentclass{article}
\usepackage{nccmath, mathtools}
\usepackage{etoolbox}
\AtBeginEnvironment{align}{\useshortskip}
\AtBeginEnvironment{align*}{\useshortskip}
\begin{document}
\section{Foo}
\noindent\rule\textwidth{0.6pt}
\begin{align*}
a^2+b^2 & = c^2
\end{align*}
\noindent\rule\textwidth{0.6pt}
\begin{align}
a^2+b^2 & = c^2
\end{align}
\noindent\rule\textwidth{0.6pt}
\end{document}
笔记:当然,我\SwapAboveDisplaySkip
首先尝试了相同的代码,但出于某种原因,我收到了有关 \noalign 放错位置的错误消息。然后我尝试了 \useshortskip,它基本上做了同样的事情,而且成功了。