根据提出的问题这里以及对给定方程应该编号的问题的可能建议这里我想问以下问题;
我发现,为以后的参考选项对证明环境之外的所有方程式进行编号是一个很好的解决方案。我也同意这样的观点,即证明中的方程式只具有局部特征,不需要全局编号。但我认为,人们只能手动使用\tag{$\ast$}
证明中引用的方程式。如果人们重新构建证明,就必须手动更改所有标签,另一方面,我认为用 (****) 标记方程式看起来很愚蠢。
因此,我想知道是否有可能只对证明环境进行局部方程编号,即在证明内部对引用的方程进行局部编号。编号应从每个证明的开头开始,按字母顺序排列 (a)、(b)、(c) 等,并在证明外部进行全局计数器。
我猜想由于我使用了 cleverref,因此可能会存在一些复杂情况。因此,最好有一个与 cleverref 兼容的解决方案来解决这个问题。此外,我希望使用所有典型的公式环境,如公式、对齐、聚集等,只需在证明中使用本地计数器即可。
答案1
您可以在环境的开始和结束时借助包提供的钩子进行临时重新定义etoolbox
。因此,第一次尝试是:
\documentclass{article}
\usepackage{mathtools,amsthm,etoolbox,cleveref}
\newtheorem{theorem}{Theorem}
\newcounter{equationstore}
\AtBeginEnvironment{proof}{\setcounter{equationstore}{\value{equation}}
\setcounter{equation}{0}\renewcommand{\theequation}{\alph{equation}}}
\AtEndEnvironment{proof}{\setcounter{equation}{\value{equationstore}}}
\begin{document}
\begin{equation}
\label{eq:one}
x = 1
\end{equation}
\begin{theorem}
A theorem.
\end{theorem}
\begin{proof}
Proof
\begin{equation}
\label{eq:p}
a = b
\end{equation}
refers to \eqref{eq:one}, \eqref{eq:two} and \eqref{eq:p} and gives
\begin{equation}
\label{eq:q}
c = d
\end{equation}
as required. Note the cleveref references are \cref{eq:one},
\cref{eq:two} and \cref{eq:p}.
\end{proof}
\begin{equation}
\label{eq:two}
z = 2
\end{equation}
Refer to \eqref{eq:one}, \eqref{eq:two} and \eqref{eq:p}. Note the
cleveref references are \cref{eq:one}, \cref{eq:two} and \cref{eq:p}.
\end{document}
这需要根据您的方程标记方案进行调整。
如果您正在使用,hyperref
您可以通过禁用该hypertextnames
选项或按如下方式避免有关重复标签的消息,其中\theHequation
也以包含当前证明的唯一编号的方式重新定义:
\documentclass{article}
\usepackage{mathtools,amsthm,etoolbox}
\usepackage{hyperref}
\usepackage{cleveref}
\newtheorem{theorem}{Theorem}
\newcounter{equationstore}
\newcounter{proofnum}
\AtBeginEnvironment{proof}{\setcounter{equationstore}{\value{equation}}
\refstepcounter{proofnum}
\setcounter{equation}{0}\renewcommand{\theequation}{\alph{equation}}
\renewcommand{\theHequation}{\arabic{proofnum}.\alph{equation}}}
\AtEndEnvironment{proof}{\setcounter{equation}{\value{equationstore}}}
\begin{document}
\begin{equation}
\label{eq:one}
x = 1
\end{equation}
\begin{theorem}
A theorem.
\end{theorem}
\begin{proof}
Proof
\begin{equation}
\label{eq:p}
a = b
\end{equation}
refers to \eqref{eq:one}, \eqref{eq:two} and \eqref{eq:p} and gives
\begin{equation}
\label{eq:q}
c = d
\end{equation}
as required. Note the cleveref references are \cref{eq:one},
\cref{eq:two} and \cref{eq:p}.
\end{proof}
\begin{equation}
\label{eq:two}
z = 2
\end{equation}
Refer to \eqref{eq:one}, \eqref{eq:two} and \eqref{eq:p}. Note the
cleveref references are \cref{eq:one}, \cref{eq:two} and \cref{eq:p}.
\end{document}