如何避免amsmath/fleqn和refstepcounter/label之间的干扰?

如何避免amsmath/fleqn和refstepcounter/label之间的干扰?

当我pdflatex两次执行以下操作时:

\documentclass[fleqn]{文章}

\usepackage{amsmath}

\开始{文档}

\newcounter{我的计数器}

\refstepcounter{我的计数器}\label{foo}\ref{foo}

\refstepcounter{我的计数器}\label{bar}\ref{bar}

\begin{方程} x\refstepcounter{mycounter}\label{baz}\ref{baz} \end{方程}

\ref{baz}

\refstepcounter{我的计数器}\label{qux}\ref{qux}

\结束{文档}

然后我得到以下输出:

1
2
  x1
1
4

如果我删除\usepackage{amsmath}[fleqn]或两者,那么我得到

1
2
  x3
3
4

我想要的是后者。

有人能告诉我如何在使用 amsmath/fleqn 时获得后者吗?

答案1

amsmath允许最终用户插入自己的标签对于编号方程式,因此在处理它们之前会收集数学环境的主体。这允许正确解析内容,可能仅在计数器步进\label后才延迟执行。但是,它确实保留了对原始 LaTeX 的访问权限,这适合您的使用:equation\label\ltx@label

在此处输入图片描述

\documentclass[fleqn]{article}

\usepackage{amsmath}

\makeatletter
\newcommand{\ltxlabel}{\ltx@label}% User-level access to original LaTeX \label
\makeatother

\begin{document}

\newcounter{mycounter}

\refstepcounter{mycounter}\label{foo}\ref{foo}% 1

\refstepcounter{mycounter}\label{bar}\ref{bar}% 2

\begin{equation} x\refstepcounter{mycounter}\ltxlabel{baz}\ref{baz} \end{equation}

\ref{baz}% 3

\refstepcounter{mycounter}\label{qux}\ref{qux}% 4

\end{document}

\ltxlabel(或\ltx@label)将立即执行,使用之前(通过\refstepcounter)步进的计数器作为标签引用。相反,\label仅用于引用equation下的计数器amsmath

相关内容