在模板中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@
机制来做一些事情,例如完全改变参考输出的格式,但我将其留给读者作为练习。
说到不良形式,该网站上有太多问题在评论中而不是在答案中得到解答,通常正确答案只会显示在评论中,而由于 stackexchange 有选择地显示评论的方式,该评论可能会被隐藏。
此外,没有理由将计数器命名
Question
为 而不是question
。计数器位于与环境和命令不同的命名空间中,因此计数器与环境同名是没有问题的,而且实际上有很多动机让计数器使用与其关联环境相同的名称。我们必须使用
\NewExpandableDocumentCommand
而不是\NewDocumentCommand
,以便将正确的值存储在引用中。