Das Deklarieren von Paketoptionen und das Laden von Paketen führt zum Fehler „Optionsabschnitt“

Das Deklarieren von Paketoptionen und das Laden von Paketen führt zum Fehler „Optionsabschnitt“

Ich versuche, ein Paket mit einigen Optionen zu erstellen. Wenn ich jedoch Optionen deklariere und andere Pakete lade, erhalte ich die folgende Fehlermeldung:

LaTeX-Fehler: \RequirePackageoder \LoadClassim Abschnitt „Optionen“.

Was ist hier los bzw. wie deklariere ich PaketoptionenUndPakete laden?

Hier ist ein Minimalbeispiel, das das Problem reproduziert:

\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}

Antwort1

Wenn Sie verwenden \DeclareOption, ist Ihre Stildatei in drei Teile unterteilt:

  1. Abschnitt „Voroptionen“(oben zuerst \DeclareOption);

  2. Abschnitt „Optionen“(zwischen dem ersten \DeclareOptionund \ProcessOptions); und

  3. Abschnitt „Postoptionen“(nach \ProcessOptions).

Was auch immer darin enthalten ist,Abschnitt „Voroptionen“wurde bereits verarbeitet. Das einzige Problem tritt also mit Inhalten jenseits dieses Punktes auf.

Da die Möglichkeit besteht, dass Sie ein Paket (oder eine Klasse) basierend auf einer Option bedingt laden möchten, und die Tatsache, dassSobald ein Paket (oder eine Klasse) geladen ist, können Sie die Aktion nicht mehr „rückgängig machen“, \RequirePackage(auch \usepackage) wird ein Fehler verursacht, wenn es innerhalb desAbschnitt „Optionen“. Hier ist ein Beispiel, wie man sich entscheiden kann, ein Paket bedingt zu laden:

\newif\if@loadhyperref %\@loadhyperreffalse
\DeclareOption{hyperref}{\@loadhyperreftrue}
\if@loadhyperref
  \RequirePackage{hyperref}
\fi

Du musst\ProcessOptions Vor \RequirePackage(im obigen Fall außerhalb der if-Bedingung), damit der obige Code erfolgreich ist. Im Allgemeinen geben Sie ein, \ProcessOptionsum sich in dieAbschnitt „Post-Optionen“bevor Sie weitere Pakete (oder Klassen) laden können.

Im konkreten Beispiel sollte folgende Änderung mystyle.stygenügen:

\newcommand{\mycmd}{new}
\DeclareOption{change}{\renewcommand{\mycmd}{renew}}
\ProcessOptions% Process package options
\RequirePackage{amsmath}% Load amsmath

verwandte Informationen