我的部分用计数器后面的点进行编号。我是这样理解的
\renewcommand{\thesection}{\arabic{section}.}
我还需要对各部分内的方程式进行编号,我尝试这样做
\numberwithin{equation}{section}
结果是我得到了带有额外点的方程式数字,例如(1..1)
而不是(1.1)
。
我怎样才能解决这个问题?
答案1
如果在 的定义中添加了结束点\thesection
,则还应从使用 的定义中删除“中间”点\thesection
,尤其是\theequation
和\thesubsection
。(请注意,对 的重新定义\thesection
也会在目录、页眉/页脚和交叉引用中产生结束点。)
\documentclass{article}
\usepackage{amsmath}
\renewcommand{\thesection}{\arabic{section}.}
\numberwithin{equation}{section}
\renewcommand{\theequation}{\thesection\arabic{equation}}
\renewcommand{\thesubsection}{\thesection\arabic{subsection}}
\begin{document}
\section{foo}
\subsection{bar}
\begin{equation}
a^2 + b^2 = c^2
\end{equation}
\end{document}
编辑:为了回应 Frank Mittelbach,这里有一个替代方案,可以更改宏\@seccntformat
,以便在新\@seccntdot
条件为真时添加一个点。etoolbox
包用于在\section
每个相等/较低级别分段命令之前将此条件设置为 true,在每个相等/较低级别分段命令之后将此条件设置为 false。
\documentclass{article}
\usepackage{amsmath}
\numberwithin{equation}{section}
\usepackage{etoolbox}
\makeatletter
\newif\if@seccntdot
\pretocmd{\section}{\@seccntdottrue}{}{}
\apptocmd{\@xsect}{\@seccntdotfalse}{}{}
\def\@seccntformat#1{%
\csname the#1\endcsname
\if@seccntdot .\fi
\quad
}
\makeatother
\begin{document}
\section{foo}
\subsection{bar}
\begin{equation}
a^2 + b^2 = c^2
\end{equation}
\end{document}
两个示例的输出:
答案2
正如@lockstep 已经提到的那样,以\thesection
这种方式进行更改意味着在任何\thesection
使用的地方(在各个地方)都会添加额外的点,例如在交叉引用或目录中,这可能不是我们所希望的。
一种可能的替代方法是更改\@seccntformat
标准标题命令使用的命令,以格式化标题本身的数字(但不在其他地方)。其默认定义是
\def\@seccntformat#1{\csname the#1\endcsname\quad}
可以轻松地在那里添加点,但是它将应用于用 生成的所有标题\@startsection
,例如,,,\section
... \subsection
,除非您构建一些根据参数提供不同结果的逻辑。
答案3
另一个简单的替代方法是使用 »标题安全« 包将点添加到标题。
\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{mathtools} % loads »amsmath«
\usepackage{titlesec}
\numberwithin{equation}{section}
\titleformat{\section}{\normalfont\Large\bfseries}{\thesection.}{1em}{}
\begin{document}
\section{Foo}
\subsection{Bar}
\begin{equation}
a^2+b^2=c^2
\end{equation}
\end{document}