我在文章类的基础上创建了一个类。这个类加载一个\maketitle
命令为 define 的包。如果我不在类中加载 babel,文档的标题将始终为英文(日期)。因此,我想在类选项中传递语言,但我还想保留加载文章类选项的可能性。我该怎么办?
我想做这样的事:
\documentclass[language, opt1, opt2]{myclass}
在我的课程中,我将内容发送language
到 babel 和opt1, opt2
article 类。这是我的课程的开头:
% default options
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
% load base class
\LoadClass[a4paper, 11pt]{article}
答案1
全局提供选项可能很方便。类文件将选项进一步传递给包。您提到了语言,让我们看看它。
在内部,siunitx
加载包translator
(beamer 包的一部分)。translator
可以看该语言的全局选项并通过使用正确的词典做出反应。
将全局选项传递给包的另一个著名例子是draft
。
\begin{filecontents}{\jobname.cls}
\ProvidesClass{\jobname}[2014/10/15 test class TeX.SX]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass[a4paper, 11pt]{article}
\renewcommand{\maketitle}{
\begin{center}
\Huge \@date
\end{center}
}
\endinput
\end{filecontents}
\documentclass[
draft,
%draft=true,
%ngerman
french
]{\jobname}
\usepackage{babel}
\usepackage{siunitx}
\usepackage{mwe}%loads graphicx
\begin{document}
\maketitle
Let the pizza dough leaven for \SIrange{18}{24}{\hour}. Is the
draft option working here? hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
\includegraphics{example-image}
\end{document}
离题的一般建议
有没有陷阱?当然。设计新类是一件微妙的事情。标准类带有一些基本选项。KOMA 类(标准包的功能增强)带有大量选项,可以进行几乎任何设计更改。标准类和 KOMA 类都不关心任何区域设置s(信件与 DIN 纸除外)。用户负责。
的替代方案babel
是polyglossia
。 两者的作用相同,但 polyglossia 有另一种语法。 因此polyglossia 不知道ngerman
(或french
) 作为全局选项,因此会忽略它。 使用 polyglossia 语法,translator
不会知道该选项,因此会忽略它。
你可以捕捉到一些问题并处理它,但不可能把用户行为的每一个小细节都考虑进去。
我曾经看到一个自定义类通过键值语法获取选项。请将上例中draft
的替换为draft=true
并查看输出。包graphicx
不知道语法,因此会忽略它。