
Я пытаюсь написать документ с ненумерованными разделами (т.е. \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}