\numberwithin 使第一个方程不编号

\numberwithin 使第一个方程不编号

我可能做了一些愚蠢的事情,但以下代码会生成一个文档,其中第一个方程式未编号(仅给出一组空括号)。第二个方程式正确编号为 1.1.2。如果我删除对 的更改\theequation,则所有内容都会正常计数。

\documentclass[draft,fleqn,openany]{book}
\usepackage[tbtags]{amsmath}
\usepackage{amssymb}
\usepackage[no-math]{fontspec}
\usepackage{xkeyval}
\usepackage{polyglossia}
\setmainfont[BoldFont={* Bold},ItalicFont={* Italic},BoldItalicFont={* Bold Italic},SlantedFont={Linux Libertine Slanted O}]{Linux Libertine O}
\usepackage[letterpaper]{geometry}
\renewcommand{\theequation}{\numberwithin{equation}{section}}
\allowdisplaybreaks[1]
\setdefaultlanguage[variant=british]{english}
\begin{document}
\frontmatter
\title{A test document}
\author{AstroPig7}
\date{}
\maketitle
\tableofcontents
\mainmatter
\chapter{One}
Test document.
\section{Two}
Test document.
\begin{equation}
\text{Test.}
\end{equation}
\subsection{Three}
\begin{equation}
\text{Test.}
\end{equation}
\end{document}

我也尝试过从序言中删除各种不必要的声明,但没有成功。

答案1

amsmath's\numberwithin{<slave>}{<master>}做了几件事。它:

  1. 检查计数器<slave>和是否<master>存在。如果存在,则
  2. 重新定义计数器的表示形式<slave>以包括使用格式的主计数器<master>.<slave>;并且
  3. 添加<slave>到 的重置列表中<master>。也就是说,每当增加<slave>时,都会重置为 0 。<master>

这是超高清的,来自amsmath.sty

\newcommand{\numberwithin}[3][\arabic]{%
  \@ifundefined{c@#2}{\@nocounterr{#2}}{%
    \@ifundefined{c@#3}{\@nocnterr{#3}}{%
      \@addtoreset{#2}{#3}%
      \@xp\xdef\csname the#2\endcsname{%
        \@xp\@nx\csname the#3\endcsname .\@nx#1{#2}}}}%
}

所以,你会仅有的需要

\numberwithin{equation}{section}

去实现你的追求。

相关内容