我正在尝试编写一份包含未编号部分(即\setcounter{secnumdepth}{0}
)和编号图表的文档,其中图表在部分内编号。我无法让secnumdepth
和chngcntr
一起工作。我能得到的最好的结果是:
\documentclass{article}
\usepackage{chngcntr}
\counterwithin*{figure}{section}
%\setcounter{secnumdepth}{0}
\begin{document}
\section{Section the First }
\begin{figure}[h]
\centering
\caption{Figure A}
\end{figure}
\begin{figure}[h]
\centering
\caption{Figure B}
\end{figure}
\section{Section the Second}
\begin{figure}[h]
\centering
\caption{Figure C}
\end{figure}
\end{document}
这样图形编号就正确了,但我有章节编号:
如果我取消注释该行\setcounter{secnumdepth}{0}
,那么正如我所希望的那样,这些部分将不再编号,但现在这些数字又变成了“counterwithout”:
如何在未编号的部分中实现每个部分的数字编号?
答案1
计数器不重置的原因在于通用\@sect
代码(参见latex.ltx
)
\def\@sect#1#2#3#4#5#6[#7]#8{%
\ifnum #2>\c@secnumdepth
\let\@svsec\@empty
\else
\refstepcounter{#1}%
\protected@edef\@svsec{\@seccntformat{#1}\relax}%
\fi
....
代码测试节级别 ( #2
) 是否大于 的值secnumdepth
。如果不是,则节计数器将重新步进,并且计数器重置列表中的所有其他计数器也将重置。
但是,如果计数器没有重置,\counterwithout
这里无论如何都是无用的(无论是否使用\counterwithout*
或)\counterwithout
一种可能性是强制\section
将数字计数器自动设置为零,但是,这也会被使用\section*
。不过,我认为这不是一个真正的问题。
\documentclass{article}
%\usepackage{chngcntr}
\usepackage{xpatch}
\setcounter{secnumdepth}{0}
%\counterwithin*{figure}{section} Not needed any longer
\xpretocmd{\section}{\setcounter{figure}{0}}{}{} % Prepend the \section code with a figure counter reset.
\begin{document}
\section{Section the First }
\begin{figure}[h]
\centering
\caption{Figure A}
\end{figure}
\begin{figure}[h]
\centering
\caption{Figure B}
\end{figure}
\section{Section the Second}
\begin{figure}[h]
\centering
\caption{Figure C}
\end{figure}
\end{document}