我如何确保所有计数器都从 0 开始?

我如何确保所有计数器都从 0 开始?

我固执己见,相信 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必须完全改变该列表。

根本不需要任何额外的包!

该过程不影响secnumdepthtocdepth计数器,因为它们没有用定义\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}

在此处输入图片描述

相关内容