该cleveref
包允许用户使用命令指定标签类型\crefname
。不幸的是,将这些标签类型与amsart
或amsbook
类一起使用会导致方程编号的位置取决于标签长度。如何使方程编号定位独立于标签长度?
具体来说,如果您考虑以下 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}