放错位置的 \noalign:mathtools 的 SwapAboveDisplaySkip 不适用于 autonum 包

放错位置的 \noalign:mathtools 的 SwapAboveDisplaySkip 不适用于 autonum 包

我想使用\SwapAboveDisplaySkipmathtools包来修复align环境上方的垂直空间。不幸的是,在加载包时这似乎不起作用autonum

! 放错了 \noalign。\SwapAboveDisplaySkip ->\noalign

autonum需要加载,因为我只想在引用方程式时标记方程式(未在 MWE 中显示,但在文档中需要),并且mathtools在加载包时该选项不起作用cleveref

这是一个平均能量损失会产生所述错误。删除\usepackage{autonum}\SwapAboveDisplaySkip可消除错误。

\documentclass{scrreprt}

\usepackage{mathtools}
\usepackage{cleveref}
\usepackage{autonum}

\begin{document}

\chapter{Chapter}
\section{Section}

Text
\begin{align}
\SwapAboveDisplaySkip
A &= B
\end{align}

\end{document}

答案1

软件包autonum补丁align和其他环境在对齐开始后立即执行某些操作(危险),因此所使用的技巧mathtools变得不可能。

从技术上讲,插入的代码autonum是在比对的第一个单元格中执行的,但是\SwapAboveDisplayskip 必须是第一个项目,因为它使用了\noalign。实际上它不必是第一个项目,只要它前面有其他\noalign项目即可。

\documentclass{scrreprt}

\usepackage{mathtools}
\usepackage{cleveref}
\usepackage{autonum}

\makeatletter
% fix autonum code
\newtoggle{autonum@equation@toggle}
\def\autonum@startChangeEnvironment#1#2{%
  \ifstrequal{#1}{split}{%
    \GlobalLetLtxMacro\autonum@outerMathEnvironmentLabel\label
  }{%
    \autonum@saveSubcommands
  }%
  \ifstrequal{#1}{equation}{%
    \global\toggletrue{autonum@equation@toggle}%
  }{%
    \global\togglefalse{autonum@equation@toggle}%
  }%
  \csuse{autonum@#1Old}#2%
  \iftoggle{autonum@equation@toggle}{}{\noalign\bgroup}%
  \ifstrequal{#1}{split}{%
    \GlobalLetLtxMacro\label\autonum@outerMathEnvironmentLabel
  }{%
    \autonum@patchSubcommands{#1}%
  }%
  \iftoggle{autonum@equation@toggle}{}{\egroup}%
}
\makeatother

\begin{document}

\chapter{Chapter}
\section{Section}

Text Text Text Text Text
\begin{equation}
A = B
\end{equation}
Text Text Text Text Text
\begin{align}
\SwapAboveDisplaySkip
A &= B
\end{align}
Text Text Text Text Text
\begin{align}
A &= B
\end{align}

\end{document}

在此处输入图片描述

答案2

当然没有问题,使用showonlyrefs布尔值mathtools

\documentclass{scrreprt}

\usepackage{mathtools}
\mathtoolsset{showonlyrefs}
\usepackage{cleveref}

\begin{document}

\chapter{Chapter}
\section{Section}

Text text text text text text%\useshortskip
\begin{align}
\SwapAboveDisplaySkip
A &= B
\end{align}

More text More text
\begin{align}
A &= B
\end{align}
Still more text

\end{document} 

如果您确实需要使用autonum,那么可以使用\useshortskip fromnccmath代替\SwapAboveDisplayskip,如下所示:

\documentclass{scrreprt}

\usepackage{mathtools, nccmath}
\usepackage{cleveref}
\usepackage{autonum}

\begin{document}

\chapter{Chapter}
\section{Section}

Text text text text text text \useshortskip
\begin{align}
A &= B
\end{align}

More text More text
\begin{align}
A &= B
\end{align}
Still more text

\end{document} 

在此处输入图片描述

相关内容