重置未编号部分的方程计数器

重置未编号部分的方程计数器

我想使用:

\counterwithin*{equation}{section}
\counterwithin*{equation}{subsection}

因为\section*{}如果部分未编号则\counterwithin*{equation}{section}无法正常工作,事实上,我使用此命令即使在目录中也执行未编号的部分:

\newcommand{\sect}[1] {\section*{#1}\addcontentsline{toc}{section}{#1}\addtocounter{section}{1}}

但是我怎么说呢......我无法正确地编号我的方程式,因为计数器没有恢复到新的未编号部分。

非常感谢!

答案1

当主计数器“步进”时,绑定到其他计数器的计数器将被重置\stepcounter。所以我猜

\newcommand{\sect}[1]{%
  \stepcounter{section}\addtocounter{section}{-1}%
  \section*{#1}%
  \addcontentsline{toc}{section}{#1}%
}

才是你真正想要的。除非你想要那个

\section{A}

\sect{B}

\section{C}

给出 3 作为“C”的节号,就像您的代码现在显示的那样。在这种情况下,

\newcommand{\sect}[1]{%
  \stepcounter{section}%
  \section*{#1}%
  \addcontentsline{toc}{section}{#1}%
}

会做。

答案2

有人可能会对这种方法提出异议:

每个重置方程式\section*都没有关于实际指的是哪个部分的信息,因此交叉引用可能会变得困难,除非hyperref使用正确的链接。

在这个解决方案中,我申请\xpretocmd重置\section方程计数器(无论如何这可能已经完成了),因此对于\section和来说\section*

计数器sectcont仅用于制作唯一的hyperref锚点。

\documentclass{article}

\usepackage{chngcntr}

\counterwithout*{equation}{section}

\usepackage{xpatch}

\newcounter{sectcont}

\xpretocmd{\section}{%
  \stepcounter{sectcont}%
  \setcounter{equation}{0}%
}{}{}

\usepackage{hyperref}

\AtBeginDocument{%
  \renewcommand{\theHequation}{equation.\thesectcont.\theequation}
}

\begin{document}

In \ref{eqeinsteinagain} we see...

\clearpage

\section*{Foo}

\begin{equation}
  E=mc^2 \label{eqeinstein}
\end{equation}


\begin{equation}
  E=mc^2 \label{eqeinsteinother}
\end{equation}


\clearpage
\section*{Foobar}

\begin{equation}
  E=mc^2 \label{eqeinsteinagain}
\end{equation}


\begin{equation}
  E=mc^2 \label{eqyeteinstein}
\end{equation}


\end{document}

在此处输入图片描述

相关内容