我的目标是获得一个可以自动编号的新声明环境。这很好 - 我可以创建一个计数器,定义一个可以自动编号的声明环境和声明证明环境,这一切都很好。
但是,我希望每个证明的编号从 1 开始,这意味着我需要在每个证明开始时重置计数器。我可以通过定义一个新环境“myproof”等来实现这一点,它是证明的包装器,但我希望它能够自动处理现有的 LaTeX 代码。
那么,如何才能“重新定义”证明环境,而无需从头开始重写证明环境?
答案1
有多种方法可以实现所需的行为。一种相对干净(且通用)的方法是\AtBeginEnvironment
从etoolbox
包中使用,在环境开始时重置与声明环境关联的计数器proof
。
例如:
\documentclass{article}
\usepackage{amsthm}
\newcounter{claimcount}
\setcounter{claimcount}{0}
\newenvironment{claim}{\refstepcounter{claimcount}\textbf{Claim \arabic{claimcount}:}}{}
\usepackage{etoolbox}
\AtBeginEnvironment{proof}{\setcounter{claimcount}{0}}
\begin{document}
text
\begin{proof}
test proof
\begin{claim}
a claim
\end{claim}
\end{proof}
more text
\begin{proof}
test proof
\begin{claim}
a claim
\end{claim}
\end{proof}
\end{document}
结果:
答案2
Guho 的回答是正确的,但为了后代,这里是我使用的代码:
\newcounter{claimCount}
\setcounter{claimCount}{0}
\newenvironment{claim}{\medskip
\noindent\refstepcounter{claimCount}\textbf{Claim~\arabic{claimCount}.}}{
\medskip}
\newenvironment{claimproof}{\noindent\textit{Proof of Claim~\arabic{claimCount}.}}{\hfill\ensuremath{\qedsymbol} \tiny{Claim~\arabic{claimCount}}
\medskip}
\AtBeginEnvironment{proof}{\setcounter{claimCount}{0}}
我经常在这个网站上寻找复制/粘贴代码,所以我想我应该贡献一些。这会自动对声明进行编号,并且(假设声明的证明在新声明被写入之前紧跟声明)声明证明会被正确标记。此外,声明证明末尾的 QED 也会被清楚地标记,以将其与完整证明末尾的 QED 区分开来(这是我的另一个烦恼)。