如果没有 DeclareOption

如果没有 DeclareOption

我有一些使用相同自定义包的文档。该“header”包默认加载包fullpage。但我想编写一个新的 LaTeX 文档,使用相同的 header,但不加载fullpage,并且我不想更改旧文件。

有没有办法添加关于选项的“如果为假”条件?我的意思是。我目前有:

\DeclareOption{fullpage}{
  \usepackage{fullpage}
}

但这意味着要更改我的所有旧文档,以将全页选项添加到我的包中。但是我想做类似的事情:

if-not-nofullpage {%
  \usepackage{fullpage}
}

在我的新文档中:

\usepackage[nofullpage]{my-header}

或者也许有一种方法可以“卸载”以前加载的包:

\usepackage{fullpage} % inconditionally

\DeclareOption{nofullpage} {%
    unload-or-revert-the-fullpage-inclusion
}

我怎样才能做到这一点?(如果您的答案中使用了纯 TeX 宏,请稍微解释一下)。

答案1

首先,您必须fullpage先加载。\ProcessOptions

具体方案如下:

\ProvidesPackage{mypackage}
\newif\ifmypackage@fullpage
\DeclareOption{fullpage}{\mypackage@fullpagetrue}
\DeclareOption{nofullpage}{\mypackage@fullpagefalse}

\ExecuteOptions{fullpage} % default is fullpage

\ProcessOptions\relax

\ifmypackage@fullpage
  \RequirePackage{fullpage}
\fi

然后调用以下任一文档

\usepackage{myclass}

或者

\usepackage[fullpage]{myclass}

将加载fullpage;一个调用的文档

\usepackage[nofullpage]{myclass}

惯于。

因此您不必更改旧文档,但新文档将能够避免加载fullpage

答案2

您还可以使用kv选项

\ProvidesPackage{mypackage}

\RequirePackage{kvoptions}
\DeclareBoolOption[true]{fullpage}       % automatically creates \ifmypackage@fullpage
\DeclareComplementaryOption{nofullpage}{fullpage}  % automatically inverses the former
\ProcessKeyvalOptions*{}

\ifmypackage@fullpage
  \RequirePackage{fullpage}
\fi

(基于egreg 的示例

另请参阅包中的互斥选项

相关内容