Я пытаюсь создать пакет с некоторыми опциями. Однако всякий раз, когда я объявляю опции и загружаю другие пакеты, я получаю следующую ошибку:
Ошибка 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