我正在嘗試創建一個包含一些選項的包。但是,每當我聲明選項並加載其他套件時,我都會收到以下錯誤:
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
,您的樣式文件分為三個部分:
預選項部分(以上第一名
\DeclareOption
);選項部分(第一個
\DeclareOption
和之間\ProcessOptions
);和後選項部分(後
\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