如何为 LaTeX 计数器分配两个父级?

如何为 LaTeX 计数器分配两个父级?

我正在研究基于的自己的 LaTeX(使用 KOMA-Script)课程scrartcl

文档结构应该提供章节和小节,以及自己的环境(练习、解决方案、示例等)。

如果没有声明子节,则这些环境将在层次结构中直接遵循该节之后的顺序,如果声明了子节,则将在层次结构中直接遵循该子节之后的顺序。

我正在寻找一种方法来自动重置此类环境的计数器,比如说exc锻炼环境的计数器,每次计数器sectionORsubsection发生变化时。

您可以在这里找到一个最简单的示例:


\documentclass{scrartcl}

\usepackage{etoolbox}

\newcounter{exc}[section]
%%% HERE OUGHT TO BE SOMETHING LIKE [section, subsection], IF YOU KNOW, WHAT I MEAN 

\newenvironment{exc}%
    % begin
    {\par%
    \refstepcounter{exc}% count
    \ifnumequal{\value{subsection}}{0}% find correct level
        % subsection level
        {\addxcontentsline{toc}{subsection}%
            {Ex.~\thesection.\theexc}% add to toc on subsection level
          \noindent\mbox{Exercise~\thesection.\theexc}\\[\baselineskip] 
        }%
        % subsubsection level
        {\addxcontentsline{toc}{subsubsection}%
            {Ex.~\thesubsection.\theexc}% add to toc on subsubsection level
          \noindent\mbox{Exercise~\thesubsection.\theexc}\\[\baselineskip]
        }%
    }%
    % end
    {\par\clearpage}

\begin{document}

\tableofcontents

\section{Hello}

  \begin{exc} Lalala. \end{exc}

  \begin{exc} Lalala. \end{exc}

\section{World}

\subsection{my little world}

  \begin{exc} Lalala. \end{exc}

\subsection{your big life}

 \begin{exc} Lalala. \end{exc} %% HERE'S THE PROBLEM.

\section{Bye!}

 \begin{exc} Lalala. \end{exc}

\end{document} `

答案1

在当前的 LaTeX 版本中(自 2015/01/01 起),你只需要

\newcounter{exc}[subsection]

并且计数器将在以下情况exc下重置:subsection踏步或者重置本身,即,当section或被chapter踩踏时。


对于较旧的版本,您可以加载chngcntr打包然后执行

\newcounter{exc}[subsection]
\counterwithin*{exc}{chapter}
\counterwithin*{exc}{section}

(感谢@egreg 的提醒!)

答案2

更新\subsection命令以重置计数器:

\let\oldsubsection\subsection
\renewcommand\subsection{\setcounter{exc}{0}\oldsubsection}

相关内容