在新部分之后将问题编号重置为 1

在新部分之后将问题编号重置为 1

在模板中Lachaise Assignment 可以创建问题。例如

\documentclass{article}

\input{structure.tex} % Include the file specifying the document structure and custom commands

\begin{document}


\begin{question}
    Quisque ullamcorper placerat ipsum. Cras nibh. Morbi vel justo vitae lacus tincidunt ultrices. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.

    % Subquestions numbered with letters
    \begin{enumerate}[(a)]
        \item Do this.
        \item Do that.
        \item Do something else.
    \end{enumerate}
\end{question}


\begin{question}
    Quisque ullamcorper placerat ipsum. Cras nibh. Morbi vel justo vitae lacus tincidunt ultrices. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.

    % Subquestions numbered with letters
    \begin{enumerate}[(a)]
        \item Do this.
        \item Do that.
        \item Do something else.
    \end{enumerate}
\end{question}
    
%------------------------------------------------

\end{document}

在此处输入图片描述

我希望在新的 \section(不是 3)中重置问题的编号,如下所示

在此处输入图片描述

结构文件中定义的问题环境为:

%----------------------------------------------------------------------------------------
%   NUMBERED QUESTIONS ENVIRONMENT
%----------------------------------------------------------------------------------------

% Usage:
% \begin{question}[optional title]
%   Question contents
% \end{question}

\mdfdefinestyle{question}{
    innertopmargin=1.2\baselineskip,
    innerbottommargin=0.8\baselineskip,
    roundcorner=5pt,
    nobreak,
    singleextra={%
        \draw(P-|O)node[xshift=1em,anchor=west,fill=white,draw,rounded corners=5pt]{%
        Question \theQuestion\questionTitle};
    },
}

\newcounter{Question} % Stores the current question number that gets iterated with each new question

% Define a custom environment for numbered questions
\newenvironment{question}[1][\unskip]{
    \bigskip
    \stepcounter{Question}
    \newcommand{\questionTitle}{~#1}
    \begin{mdframed}[style=question]
}{
    \end{mdframed}
    \medskip
}

答案1

将其添加为答案而不是评论以提高可见性。

老天爷,不要在每个部分\setcounter后都手动重置计数器\section。这种做法很糟糕。

正确的处理方式是,正如 Bernard 在他的评论中提到的那样,¹ 就是写

\counterwithin*{Question}{section}

\verb++*+ 不会重新定义\theQuestion为包含章节编号。如果没有它,您的问题将编号为 1.1、1.2、2.1 等。

我还注意到question环境

\stepcounter{Question}

在其定义中。我建议将其更改为\refstepcounter{Question}允许通过数字引用问题。²

当然,由于我们在章节内进行编号,因此无法区分章节 1 中的问题 1 和章节 2 中的问题 1。幸运的是,\LaTeX\ 提供了一种机制来实现这一点。我们需要定义\p@反名计数器的前缀将仅出现在引用中。表示@它是一个私有命令,因此我们需要在类/包文件中定义此命令,否则请将其放在\makeatletter\makeatother

\makeatletter
\NewExpandableDocumentCommand{\p@Question}{}{\thesection.}
\makeatother

如果你的 LaTeX 已经过时了,你可能需要改写

\makeatletter
\newcommand{\p@Question}{\thesection.}
\makeatother

然后,我们将得到\ref第 1 节中第一个问题的 1.1 和\ref第 2 节中第一个问题的 2.1。真正聪明的 TeX 黑客可以使用该\p@机制来做一些事情,例如完全改变参考输出的格式,但我将其留给读者作为练习。


  1. 说到不良形式,该网站上有太多问题在评论中而不是在答案中得到解答,通常正确答案只会显示在评论中,而由于 stackexchange 有选择地显示评论的方式,该评论可能会被隐藏。

  2. 此外,没有理由将计数器命名Question为 而不是question。计数器位于与环境和命令不同的命名空间中,因此计数器与环境同名是没有问题的,而且实际上有很多动机让计数器使用与其关联环境相同的名称。

  3. 我们必须使用\NewExpandableDocumentCommand而不是\NewDocumentCommand,以便将正确的值存储在引用中。

相关内容