为什么方程编号的位置取决于标签长度?

为什么方程编号的位置取决于标签长度?

cleveref包允许用户使用命令指定标签类型\crefname。不幸的是,将这些标签类型与amsartamsbook类一起使用会导致方程编号的位置取决于标签长度。如何使方程编号定位独立于标签长度?

具体来说,如果您考虑以下 MWE,则第二个方程编号位于第一个方程编号的左侧,第三个方程编号位于第二个方程编号的左侧很远的地方。所有方程编号都应在第一个方程编号下对齐。

\documentclass{amsart}
\usepackage{cleveref}

\crefname{foo}{bar}{baz}

\begin{document}
\begin{gather}
  \label{eq:a-really-long-label-but-equation-number-is-well-placed}
  \mathsf{blah blah blah blah blooh blooh blooh blooh} \to \mathsf{blah blah blah blah blah beep boop}
\end{gather}

\begin{gather}
  \label[foo]{eq:short-okish}
  \mathsf{blah blah blah blah blooh blooh blooh blooh} \to \mathsf{blah blah blah blah blah beep boop}
\end{gather}

\begin{gather}
  \label[foo]{eq:long-so-out-in-margin}
  \mathsf{blah blah blah blah blooh blooh blooh blooh} \to \mathsf{blah blah blah blah blah beep boop}
\end{gather}
\end{document}

在此处输入图片描述

答案1

cleveref这是没有正确修补的问题\gmeasure@,并且

\let\label\@gobble

而不是使用一些也会吞噬可选参数的宏。

\documentclass{amsart}
\usepackage{cleveref}
\usepackage{xpatch}

\crefname{foo}{bar}{baz}

\makeatletter
\newcommand{\@gobbleoptone}[2][]{}
\xpatchcmd{\gmeasure@}{\let\label\@gobble}{\let\label\@gobbleoptone}{}{}
\makeatother

\begin{document}

\begin{gather}
  \mathsf{blah blah blah blah blooh blooh blooh blooh} \to \mathsf{blah blah blah blah blah beep boop}
  \label{eq:a-really-long-label-but-equation-number-is-well-placed}
\end{gather}

\begin{gather}
  \mathsf{blah blah blah blah blooh blooh blooh blooh} \to \mathsf{blah blah blah blah blah beep boop}
  \label[foo]{eq:short-okish}
\end{gather}

\begin{equation}
  \mathsf{blah blah blah blah blooh blooh blooh blooh} \to \mathsf{blah blah blah blah blah beep boop}
  \label[foo]{eq:long-so-out-in-margin}
\end{equation}

\end{document}

在此处输入图片描述

相关内容