我固执己见,相信 0 是第一个数字。自然,我希望我的所有计数器都从 0 开始。页计数器、章节计数器、子节计数器、定理、定义 - 一切! - 如果要计数,则从 0 开始。
我知道如何让节计数器从 0 开始:让章节编号从 0 开始
但是,如何才能有效地满足我的教条而不必写很多呢\setcounter{<...>}
?
答案1
\documentclass{article}
\makeatletter
\def\@arabic#1{\the\numexpr(#1)-1\relax}
\def\@roman#1{\romannumeral\numexpr(#1)-1\relax}
\def\@Roman#1{\expandafter\@slowromancap\romannumeral\numexpr(#1)-1\relax @}
\makeatother
\begin{document}
\section{Zero}
\subsection{Zero.Zero}
\subsubsection{Zero.Zero.Zero}
\section{One}\label{ooo}
\subsection{One.Zero}
\subsubsection{One.Zero.Zero}\label{aaa}
\section{Two}
\subsection{Two.Zero}\label{bbb}
\subsubsection{Two.Zero.Zero}
See sections \ref{ooo}, \ref{aaa} and \ref{bbb}.
\end{document}
答案2
您可以使用\LoopResetCounters
它将xassoccnt
逗号分隔列表中给出的所有计数器设置为零。
请参阅更新以获取所有定义的计数器\newcounter
并将它们放在此答案末尾的列表中!
\documentclass{article}
\usepackage{xassoccnt}
\begin{document}
\setcounter{figure}{17}
\thefigure
\LoopResetCounters{page,section,subsection,figure,equation,subsubsection,table}
\thefigure
\end{document}
更新
我抓住了大卫卡莱尔的评论,并利用\cl@@ckpt
列表将所有计数器重置为-1
,但省略了page
那里的计数器!
为了使重置列表发挥作用,\@stpelt
必须完全改变该列表。
根本不需要任何额外的包!
该过程不影响secnumdepth
和tocdepth
计数器,因为它们没有用定义\newcount
。
\documentclass{article}
\makeatletter
\newif\if@resetall
\@resetallfalse
\let\latex@newcounter\newcounter
\newcommand{\ResetAllCounters}[1][-1]{%
\EnableResetAll
\def\@elt##1{%
\def\@tmp@@a{##1}
\def\@tmp@@b{page}
\ifx\@tmp@@a\@tmp@@b % Check if it is the page counter
\setcounter{##1}{\z@}%
\else
\setcounter{##1}{#1}%
\fi
}%
\cl@@ckpt% Loop through the list of all counters defined with \newcounter
\gdef\@@resetvalue{#1}% Store the reset value
}
% Redefine the reset stepper \@elt - list marker
\let\latex@@stpelt\@stpelt
\def\@stpelt#1{%
\if@resetall%
\global\csname c@#1\endcsname \numexpr\@@resetvalue-1\stepcounter{#1}
\else
\latex@@stpelt{#1}%
\fi
}%
\newcommand{\DisableResetAll}{%
\global\@resetallfalse
}
\newcommand{\EnableResetAll}{%
\global\@resetalltrue%
}
\setcounter{secnumdepth}{5}
\setcounter{tocdepth}{5}
\makeatother
\begin{document}
\tableofcontents
\part{Foo}
\section{Foo}
\ResetAllCounters
\part{Foostuff}
\section{Foostuff}
\subsection{Foostuff subsection}
\subsubsection{Foostuff subsubsection}
\paragraph{Foostuff paragraph}
\subparagraph{Foostuff subparagraph}
\part{Foobar}
\section{Foobar}
\subsection{Foobar subsection}
\subsubsection{Foobar subsubsection}
\paragraph{Foobar paragraph}
\subparagraph{Foobar subparagraph}
\ResetAllCounters
\DisableResetAll
\part{Barstuff}
\section{Barstuff}
\subsection{Barstuff subsection}
\subsubsection{Barstuff subsubsection}
\paragraph{Barstuff paragraph}
\subparagraph{Barstuff subparagraph}
\end{document}