我使用 pdflatex 设计考试,其中应包含代码示例。在讲义中,我成功地使用了列表包。一般设计是通过考试文檔類別。
我创建了自己的课程文件,扩展了考试课程文件并将选项引导至考试课程。
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{exam}}
\DeclareOption{answers}%
{%
...
\PassOptionsToClass{\CurrentOption}{exam}%pass option to exam
}
\ProcessOptions
\LoadClass[a4paper,12pt,oneside,openany,\droptnm]{exam}
这个类定义了一个特殊的预定义格式列表并处理问题。因此,我的“私人”考试课想使用
\RequirePackage{listings}
\RequirePackage{probsoln}
不幸的是,这会导致以以下内容开头的错误消息:
! LaTeX Error: Command \abovecaptionskip already defined.
...
! LaTeX Error: Command \belowcaptionskip already defined.
...
! LaTeX Error: Command \solution already defined.
...
主考试文档中的以下代码有效:
\usepackage{listings}
\usepackage{probsoln}
当我查找信息源时,我收集到的信息是RequirePackage
和与之前允许但不允许usepackage
的差异相同。RequirePackage
documentclass
usepackage
有人能告诉我为什么RequirePackage
这里的类文件不起作用吗?
答案1
这里的一个问题是 和 都probsoln
定义exam
了solution
环境。但是,probsoln
只有在环境不存在时才会定义它。如果你probsoln
先加载,它会定义solution
环境,因为它未定义。然后你加载exam
,它也会尝试定义solution
环境,这就是导致错误的原因Command \solution already defined.
放置的位置\RequirePackage
取决于您何时需要该包中定义的命令。例如,如果您的类选项需要使用xkeyval
(或类似的东西),您需要在选项之前加载该包,但如果基本类命令需要在任何包含的包中的命令之前定义,那么这些包需要在之后加载\LoadClass
。