当我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
。