聲明包選項並載入包會導致“選項部分”錯誤

聲明包選項並載入包會導致“選項部分”錯誤

我正在嘗試創建一個包含一些選項的包。但是,每當我聲明選項並加載其他套件時,我都會收到以下錯誤:

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

相關內容