我正在编写一个基于 的新类文件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.