Объявление параметров пакета и загрузка пакетов приводит к ошибке «раздела параметров»

Объявление параметров пакета и загрузка пакетов приводит к ошибке «раздела параметров»

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

Ошибка 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

Связанный контент