在中exam.cls
,我看到了以下代码,我不明白它们在文档类中如何发挥作用(exam
):
\newcounter{question}
\newcounter{partno}
\newcounter{subpart}
\newcounter{subsubpart}
\newcounter{choice}
\newenvironment{questions}{%
\newcounter{choice}
\renewcommand\thechoice{\Alph{choice}}
\newcommand\choicelabel{\thechoice.}
\newenvironment{choices}%
{\list{\choicelabel}%
{\usecounter{choice}\def\makelabel##1{\hss\llap{##1}}%
\settowidth{\leftmargin}{W.\hskip\labelsep\hskip 2.5em}%
\def\choice{%
\item
} % choice
\labelwidth\leftmargin\advance\labelwidth-\labelsep
\topsep=0pt
\partopsep=0pt
}%
}%
它们的用途是什么,尤其是\newenvironment{questions}
和\newcounter{question}
?
答案1
\newenvironment
用于定义新环境。语法(不带可选参数)为
\newenvironment{<name>}[<number of arguments>]
{<begin definition>}
{<end definition>}
其中<number of arguments>
是介于零和九之间的整数(含)。在 中,可以使用、、 最多<begin definition>
访问强制参数(如果存在);这些参数不能以相同的方式在 部分 中直接访问,但您可以使用宏等将它们存储在 中,然后在部分 中使用这些宏。#1
#2
#<number of arguments>
<end definition>
<begin definition>
<end definition>
当使用可选参数时,syantx 是
\newenvironment{<name>}[<number of arguments>][<default>]
{<begin definition>}
{<end definition>}
#1
在这种情况下,可以使用和强制参数来访问可选参数,#2
最多使用#<number of arguments>
;可选参数具有由 指定的默认值<default>
。
\newcounter
是定义新计数器的 LaTeX 命令;语法是
\newcounter{<name>}[<old counter>]
这全局定义了计数器并将其初始化为零;如果在可选参数中指定了<name>
已经存在的计数器的名称( ),则在增加时重置新定义的计数器。<old counter>
<name>
<old counter>
关联命令是
\setcounter{<name>}{<value>}
将计数器全局设置为给定的值<value>
。
\addtocounter{<name>}{<value>}
以给定的值全局增加计数器<value>
。
\stepcounter{<name>}
在计数器上加一。
\the<name>
计数器的表示<name>
;例如,
\renewcommand\the<name>{\arabic{<name>}}
来获得使用印度-阿拉伯数字的表示,类似地,可以使用\Alph{<name>}
(使用大写字母表示),\alph{<name>}
(使用小写字母表示),\Roman{<name>}
(使用大写罗马数字表示)和\roman{<name>}
(使用小写罗马数字表示)。
举一个小例子,让我们定义一个环境,它使用两侧缩进和编号来编写其内容;为此,我们可以使用现有的quote
环境;我们为编号创建一个计数器;<begin part>
只需启动quote
环境,步骤新定义的计数器并排版其值;只需<end part>
结束quote
环境:
\documentclass{article}
\usepackage{lipsum}% just to generate text for the example
\newcounter{myexa}
\newenvironment{myexample}
{\begin{quote}\stepcounter{myexa}{\bfseries\themyexa.}~\ignorespaces}
{\end{quote}}
\begin{document}
\lipsum[2]
\begin{myexample}
\lipsum[2]
\end{myexample}
\lipsum[2]
\begin{myexample}
\lipsum[2]
\end{myexample}
\end{document}
在您的具体示例中(仅显示原始定义的部分,并且具有\newcounter{choice}
会产生错误的重复定义(即),questions
定义了一个名为 的新环境;在内部,此环境使用编号\list
,它将使用新定义的计数器产生编号choice
。