方程编号与水平对齐混乱

方程编号与水平对齐混乱

我有一个方程式,其中的长线对齐不太好:

方程 (9) 和 (10) 除了方程编号外完全相同,并且两个方程的第一行都刚好适合文本区域。LaTeX 没有生成任何溢出警告,但方程 (10) 的第一行显然超出了文本区域。显然,这种不良行为与方程编号长于 LaTeX 无法容纳的第二行有关。我怎样才能使方程 (10) 显示为方程 (9),而不缩进,并在第二行显示方程编号?

来源如下:

\documentclass{article}
\usepackage{amsmath,lipsum}
\begin{document}
\setcounter{equation}{8}
\lipsum[1][1-3]
\begin{align}
\nonumber 0
&= \framebox[325pt]{line} \\
&= \framebox[295pt]{line}
\end{align}
\lipsum[1][4-6]
\begin{align}
\nonumber 0
&= \framebox[325pt]{line} \\
&= \framebox[295pt]{line}
\end{align}
\lipsum[1][7-9]
\end{document}

答案1

在“居中公式,标签在右侧”模式下,从左边距到对齐结构的“缩进”只有在以下情况下才应被接受:减少。遗憾的是,此模式的宏\x@calc@shift@rc无法防止可能增加的“缩进”。您的示例显示了“缩进”如何从 (9) 增加到 (10)。

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

\usepackage{etoolbox}
\makeatletter
\patchcmd\x@calc@shift@rc
  {% The \eqnshift@ could end up increasing!
    \eqnshift@\displaywidth
    \advance\eqnshift@-\@tempdima
    \advance\eqnshift@-\@tempcntb\alignsep@
    \global\divide\eqnshift@\tw@
  }
  {% Use \dimen@ to perform the calculations instead
    \dimen@\displaywidth
    \advance\dimen@-\@tempdima
    \advance\dimen@-\@tempcntb\alignsep@
    \divide\dimen@\tw@
   % Update \eqnshift@ if and only if the result decreases
    \ifdim\dimen@<\eqnshift@
      \global\eqnshift@\dimen@
    \fi
  }
  {}
  {}
\makeatother

\begin{document}
\setcounter{equation}{8}
\lipsum[1][1-3]
\begin{align}
\nonumber 0
&= \framebox[325pt]{line} \\
&= \framebox[295pt]{line}
\end{align}
\lipsum[1][4-6]
\begin{align}
\nonumber 0
&= \framebox[325pt]{line} \\
&= \framebox[295pt]{line}
\end{align}
\lipsum[1][7-9]
\end{document}

快速修复 amsmath 的对齐问题


附录:我已将修复报告给GitHub 问题跟踪器

答案2

在此处输入图片描述

使用命令phantom中的选项\adjustbox创建一个幻影标签,如下所示

\adjustbox{phantom}{(\arabic{equation})}

如果你打算经常使用这个命令,请定义一个\tagphantom命令

\newcommand{\tagphantom}{\adjustbox{phantom}{(\arabic{equation})} \notag}

\documentclass{article}
\usepackage{amsmath,lipsum}
\usepackage{adjustbox}
\newcommand{\tagphantom}{\adjustbox{phantom}{(\arabic{equation})} \notag}
\begin{document}
\setcounter{equation}{8}
\lipsum[1][1-3]
\begin{align}
\nonumber 0
&= \framebox[325pt]{line} \\
&= \framebox[295pt]{line}
\end{align}
\lipsum[1][4-6]
\begin{align}
    &= \framebox[295pt]{line} \tagphantom  \\
    &=\framebox[295pt]{line}
\end{align}
\lipsum[1][7-9]
\end{document}

另一种方法是,split当您不希望标签更改每行可用的空间时使用align,但这会使标签位于垂直中间

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath,lipsum}
\begin{document}
\setcounter{equation}{8}
\lipsum[1][1-3]
\begin{align}
\nonumber 0
&= \framebox[325pt]{line} \\
&= \framebox[295pt]{line}
\end{align}
\lipsum[1][4-6]
\begin{align}
\nonumber 0
&= \framebox[325pt]{line} \\
&= \framebox[295pt]{line}
\end{align}
\lipsum[1][7-9]
\end{document}

相关内容