I would like to define some base-class.cls
, with some options and their defaults, and then provide some mechanism so that other derived classes can reuse the existing options and change the defaults. Furthermore, I would like that options added to the base-class
in the future also propagate to the derived classes without any further change.
This question is somewhat related to an existing question about new and existing class options. In essence, How to replace the default set of options when defining a new class?.
As an example, assume that there is some base article.cls
with three mutually exclusive options: 10pt
, 11pt
and 12pt
. Where 10pt
is the default option. Now one wants to define a new document class, say nice-article
which has the same three options, but 11pt
is the default.
From the answer to the linked question, the solution would be to declare the three options within nice-article.cls
using \DeclareOption
which store the selected action in some if's or macros, then call \ExecuteOptions{11pt}
to set the new default, and finally call \PassOptionsToClass{...}{article}
with the appropriate saved option.
But all this seems too cumbersome and is not very modular. Say for example that later article
adds a new 13pt
option. Ideally I would also like nice-article
to also benefit from this new option; in particular if I explicitly said
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
However using that solution I would also have to go and modify nice-article.cls
to make it aware of the new existing 13pt
.
So the question is (a) hasn't this problem been already solved? i.e. is there some package or extension or command which I'm missing and allows to do this? and, if not, (b) how should I go about implementing such feature?
Assume that I'm implementing a class base-class.cls
which can have any kind of code and macros needed; but then I want to be able to define new classes on top of that (say nice-class.cls
, bright-class.cls
, funny-class.cls
) which can use options from base-class
, defining their own defaults and being automagically upgraded with more options if I happen to change the base-class
.
Hope that the question makes sense.