我知道我可以使用以下方法更改问题编号\setcounter{Question}
:
\begin{Exercise}[title={Title}, label=opg]
\Question
Exercise 1
\setcounter{Question}{10}
\Question
Exercise 11
\subQuestion
subQuestion a
\setcounter{subQuestion}{3}
\subQuestion
subQuestion d
\end{Exercise}
但我无法用同样的方式改变第一个问题的编号:
\begin{Exercise}[title={Title}, label=opg]
\setcounter{Question}{10}
\setcounter{subQuestion}{3}
\Question
Not Exercise 11 ???
\subQuestion
Not subQuestion d ???
\end{Exercise}
我如何更改第一个问题的编号?如能得到任何帮助我将不胜感激。
答案1
当初始化一个新的练习时,计数器被设置为 0,显然第一个\Question
命令触发了这个初始化。
作为一种解决方法,您可以更改命令的定义\QuestionNB
(该命令通常会打印计数器的值)Question
,以执行三件事:
- 打印您想要的值
- 将计数器设置为该值
- 将定义改回原来打印计数器的值
在代码中:
\gdef\QuestionNB{%
#1.\ % print the desired value
\setcounter{Question}{#1}% set the counter
\gdef\QuestionNB{\arabic{Question}.\ }% change the definition back to the original
}
请注意,您可以从命令本身内部修改命令的定义,这在 LaTeX 中是允许的,并且可以用于您希望第一次调用命令执行与第二次和后续调用不同的操作的情况。
相同的解决方法可用于subQuestion
,请注意,您需要\@alph
打印第一个字母,因为常规\alph
需要一个真正的计数器。如果您提供要打印的实际值(d
而不是4
),则可以简化此过程,然后您只需打印 即可#1
。
两种情况都包装在以所需值作为参数的命令中。
完整代码:
\documentclass{article}
\usepackage{exercise}
\newcommand{\setquestionnr}[1]{%
\gdef\QuestionNB{#1.\ %
\setcounter{Question}{#1}%
\gdef\QuestionNB{\arabic{Question}.\ }%
}%
}
\makeatletter
\newcommand{\setsubquestionnr}[1]{%
\gdef\subQuestionNB{\@alph{#1})\ %
\setcounter{subQuestion}{#1}%
\gdef\subQuestionNB{\alph{subQuestion})\ }%
}%
}
\makeatother
\begin{document}
\begin{Exercise}[title={Title}, label=opg]
\setquestionnr{11}
\setsubquestionnr{4}
\Question
Not Exercise 11 ???
\subQuestion
Not subQuestion d ???
\subQuestion
Second subquestion
\Question
Next question
\subQuestion
Next subquestion
\end{Exercise}
\end{document}
结果: