Estou tentando criar um pacote com algumas opções. Porém, sempre que declaro opções e carrego outros pacotes, recebo o seguinte erro:
Erro LaTeX:
\RequirePackage
ou\LoadClass
na seção de opções.
O que está acontecendo aqui e/ou como declaro opções de pacoteecarregar pacotes?
Aqui está um exemplo mínimo que replica o problema:
\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}
Responder1
No momento em que você utiliza o \DeclareOption
, seu arquivo de estilo está dividido em três partes:
Seção de pré-opções(acima primeiro
\DeclareOption
);Seção de opções(entre primeiro
\DeclareOption
e\ProcessOptions
); eSeção de pós-opções(depois
\ProcessOptions
).
O que quer que esteja contido noseção de pré-opçõesjá foi processado. Portanto, o único problema surge com o conteúdo além deste ponto.
Como existe a possibilidade de você querer carregar condicionalmente um pacote (ou classe) com base em alguma opção, e o fato de queuma vez que um pacote (ou classe) é carregado você não pode "desfazer" a ação, \RequirePackage
(também \usepackage
) invoca um erro se usado dentro doseção de opções. Aqui está um exemplo de como alguém pode decidir carregar um pacote condicionalmente:
\newif\if@loadhyperref %\@loadhyperreffalse
\DeclareOption{hyperref}{\@loadhyperreftrue}
\if@loadhyperref
\RequirePackage{hyperref}
\fi
Você terá que\ProcessOptions
antes \RequirePackage
(no caso acima, fora da condição if), para que o código acima seja bem-sucedido. Em geral, emita \ProcessOptions
para se colocar noseção de pós-opçõesantes de poder carregar mais pacotes (ou classes).
No exemplo específico, a seguinte alteração mystyle.sty
deve ser suficiente:
\newcommand{\mycmd}{new}
\DeclareOption{change}{\renewcommand{\mycmd}{renew}}
\ProcessOptions% Process package options
\RequirePackage{amsmath}% Load amsmath