![如果没有 DeclareOption](https://linux22.com/image/276145/%E5%A6%82%E6%9E%9C%E6%B2%A1%E6%9C%89%20DeclareOption.png)
我有一些使用相同自定义包的文档。该“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 的示例
另请参阅包中的互斥选项