将 \newenvironment、\newcounter 放在文档类中的目的是什么?

将 \newenvironment、\newcounter 放在文档类中的目的是什么?

在中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

相关内容