通过全局选项的元类

通过全局选项的元类

想象

我正在为我的组织创建一个小型的自定义 LaTeX 类。我希望这个类支持几种不同类型的文档:文章和报告。我希望根据提供的全局选项从article或类实际继承。report

我知道这听起来有点奇怪,但我思考我的理由很充分。这两个文档将共享一些共同元素,比如共同的封面和其他类型的标记,而且我希望共享这些功能的共同代码。不过,我还想进行其他“特定类别”的更改(默认字体大小、更短或更长的默认设置等)。

我可以通过从一个类继承并根据用户传递的全局选项覆盖默认选项来实现这一点。但我希望它是模块化的,并且将来可以轻松修改(可能是格式book等)。

试图

这是我目前所得到的。

%
% custom.cls
%

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{custom}[...]

% Use key-value options for article/report specification
\RequirePackage{kvoptions}

\DeclareBoolOption{report}
\DeclareComplementaryOption{article}{report}

% I _hope_ this processes key-value options, and no others
\ProcessKeyvalOptions{custom}\relax

\ifcustom@report
    \input{custom-report}
\else
    \input{custom-article}
\fi
%
% custom-report.tex
%

\message{This is a report!}
\message{Class Options: \@classoptionslist}

\ExecuteOptions{11pt,letterpaper}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}}
\ProcessOptions\relax
\LoadClass{report}
%
% custom-article.tex
%

\message{This is an article!}
\message{Class Options: \@classoptionslist}

\ExecuteOptions{12pt,letterpaper}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass{article}

问题

执行此操作时,我遇到了各种奇怪的错误。我可以成功将report或传递article\documentclass[...]{custom},并加载正确的“类”。但是当我尝试添加其他选项,例如twocolumn,我会收到指示缺少的错误\begin{document},即使我有一个\begin{document}

这种行为是否受支持?是否有“正确”的方式来完成我想做的事情?我真的不想写单独的.cls文件...

相关内容