我想有条件地将选项从我的自定义类传递给回忆录,为此我尝试做一个 MWE
我的Class.cls
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myClass}
\newif\ifthesis@foo
\DeclareOption{foo}{\thesis@footrue}
\DeclareOption{nofoo}{\thesis@foofalse}
\ExecuteOptions{foo} %default is foo
% Based on the memoir class
\ifthesis@foo
\DeclareOption*{\PassOptionsToClass{a4paper,12pt,french,twoside,openright,openbib, final}{memoir}}
\else
\DeclareOption*{\PassOptionsToClass{a5paper,10pt,french,twoside,openright,openbib, final}{memoir}}
\fi
\ProcessOptions\relax
\LoadClass{memoir}
主文本
\documentclass[foo]{myClass}
\title{MWE}
\begin{document}
\maketitle
\frontmatter
\mainmatter
\end{document}
我想保留 thesis@foo 标志以便稍后有条件地制作标题页。
此 MWE 总是生成以美国信纸为页面大小的 PDF(我认为这是默认设置)
感谢您的帮助
答案1
我认为,你混淆了你的新课程。(顺便说一句:你应该给它一个更具描述性的名字!)
正如 David 指出的那样,您应该始终定义\DeclareOption*
来定义如何处理未声明的选项。 在您的例子中,将未知选项交给 class 是有意义的memoir
,因为它可能知道如何处理它。
接下来,请记住,您确实必须声明在类中使用该选项时应该发生什么。您的声明仅设置了布尔值,但没有发生其他任何事情。您\ExecuteOption
无论如何都不会得到合理的结果。
相反,当您实际使用该选项时,您必须将\PassOptionsToClass
-commands 放在 里面\DeclareOption
才能执行它。
所以你的课程应该是这样的:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myClass}
%% Actually, you declare this boolean, but you never use it!
\newif\ifthesis@foo
\DeclareOption{foo}{%
\thesis@footrue
\typeout{Declare Option Foo!}
\PassOptionsToClass{a4paper,12pt,french,twoside,openright,openbib,
final}{memoir}
}
\DeclareOption{nofoo}{%
\thesis@foofalse
\typeout{Declare Option NoFoo!}
\PassOptionsToClass{a5paper,10pt,twoside,openright,openbib,
final}{memoir}
}
%% What to do, if an unknown option is entered?
\DeclareOption*{%
\PassOptionsToClass{\CurrentOption}{memoir}}
\ExecuteOptions{foo} %default is foo
\ProcessOptions\relax
% Based on the memoir class
\LoadClass{memoir}
\endinput