如何将类文件中的参数传递到不同的包中?

如何将类文件中的参数传递到不同的包中?

我正在编写一个基于 的新类文件book,并考虑同时提供英语和荷兰语版本。最简单的做法似乎是传递参数,因此我构建了以下类文件:

...
\ProvidesClass{UGentCourse}[2011/07/28 v1.0 UGentCourse]

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}
\ProcessOptions \relax
\LoadClass[12pt,a4paper,twoside]{book}

\RequirePackage{babel} %francais, polish, spanish, ...
...

我相信这将允许我做到:

\documentclass[dutch]{UGentCourse}

奇怪的是,它不能完全工作。如果我将其从荷兰语切换为英语(或切换回),我会收到错误:

Package babel Error: You haven't loaded the option english (dutch) yet.

如果我重新运行文件,错误就消失了。我隐约知道发生了什么,但不知道如何防止这种情况发生。感谢大家的帮助。

答案1

您可以通过如下修改类定义来避免此错误:

\ProvidesClass{UGentCourse}[2011/07/28 v1.0 UGentCourse]

\DeclareOption{english}{\AtEndOfClass{\main@language{english}}}
\DeclareOption{dutch}{\AtEndOfClass{\main@language{dutch}}}

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}

\ProcessOptions\relax

\LoadClass[12pt,a4paper,twoside]{book}

\RequirePackage[dutch, english]{babel}

传递给包的选项列表中的最后一种语言babel(即english此处)是默认语言。如果在可选参数中未指定任何语言,则默认语言在文档开头处于活动状态\documentclass.

相关内容