如何有条件地将选项传递给回忆录课程?

如何有条件地将选项传递给回忆录课程?

我想有条件地将选项从我的自定义类传递给回忆录,为此我尝试做一个 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

相关内容