声明包选项并加载包导致“选项部分”错误

声明包选项并加载包导致“选项部分”错误

我正在尝试创建一个带有一些选项的包。但是,每当我声明选项并加载其他包时,我都会收到以下错误:

LaTeX 错误:\RequirePackage\LoadClass在选项部分。

这里发生了什么以及/或者我如何声明包选项加载包裹?

这是一个复制该问题的最小示例:

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{mystyle.sty}
\newcommand{\mycmd}{new}% Define some command
\DeclareOption{change}{\renewcommand{\mycmd}{renew}}% Package option `change` updates \mycmd
\RequirePackage{amsmath}% Load amsmath
\end{filecontents*}

\usepackage{mystyle}
\begin{document}
\mycmd% This should be "new"
\end{document}

答案1

当你使用时\DeclareOption,你的样式文件被分为三个部分:

  1. 预选项部分(上面第一个\DeclareOption);

  2. 选项部分(在第一\DeclareOption和之间\ProcessOptions);并且

  3. 后选项部分(后\ProcessOptions)。

无论包含在预选项部分已经处理完毕。因此,唯一的问题出现在超出此点的内容上。

由于可能存在您希望根据某些选项有条件地加载包(或类),并且一旦加载了包(或类),就无法“撤消”该操作\RequirePackage(还\usepackage)如果在选项部分下面是一个如何有条件地加载包的示例:

\newif\if@loadhyperref %\@loadhyperreffalse
\DeclareOption{hyperref}{\@loadhyperreftrue}
\if@loadhyperref
  \RequirePackage{hyperref}
\fi

你必须\ProcessOptions \RequirePackage(在上述情况下,在 if 条件之外),上述代码才能成功。一般来说,发出\ProcessOptions是为了让自己处于后选项部分然后才可以加载更多包(或类)。

在具体示例中,以下更改就mystyle.sty足够了:

\newcommand{\mycmd}{new}
\DeclareOption{change}{\renewcommand{\mycmd}{renew}}
\ProcessOptions% Process package options
\RequirePackage{amsmath}% Load amsmath

相关内容