
Ich arbeite an einem benutzerdefinierten Paket für meine Makros und Tastenkombinationen und einer benutzerdefinierten Klasse für meinen bevorzugten Dokumentstil. Ich verwende es, DeclareKeys
um Schlüsselwertoptionen in meinem Paket zu definieren, und dann leitet meine Klasse, die dieses Paket lädt, die Optionen global an das Paket weiter, indem sie sie an die Basisklasse (Artikel) weiterleitet. Es funktioniert gut, aber ich erhalte seltsame Warnungen über ungenutzte globale Optionen. Hier ist der Code:
% demo-pkg.sty
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{demo-pkg}[Demo]
\RequirePackage{xstring}
\DeclareKeys[my]
{
lang.choices:nn =
{ english, hebrew }
{\ExpandArgs{Nc}\let\@my@lang{l_keys_choice_tl}},
lang.usage = load,
lang.initial:n = english,
notation.choices:nn =
{ physics, math }
{\ExpandArgs{Nc}\let\@my@notation{l_keys_choice_tl}},
notation.usage = load,
notation.initial:n = physics,
foo.choices:nn =
{ bar, baz }
{\ExpandArgs{Nc}\let\@my@foo{l_keys_choice_tl}},
foo.usage = load,
foo.initial:n = bar
}
\ProcessKeyOptions[my]
\RequirePackage{xparse}
\IfStrEqCase{\@my@notation}{%
{physics}{%
\NewDocumentCommand{\Conjugate}{ m }{{##1}^{\ast}}%
}%
{math}{%
\NewDocumentCommand{\Conjugate}{ m }{\overline{##1}}%
}%
}%
% demo-cls.cls
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{demo-cls}[Demo class]
\DeclareKeys[demo-cls]
{
unknown.code = \PassOptionsToClass{\CurrentOption}{article}
}
\ProcessKeyOptions[demo-cls]
\LoadClass[a4paper, 12pt]{article}
\RequirePackage{demo-pkg}
% main.tex
\documentclass[lang=hebrew, notation=math, foo=baz]{demo-cls}
\usepackage{amsmath}
\begin{document}
\[ z = x + iy \Longleftrightarrow \Conjugate{z} = x - iy \]
\end{document}
Das Ausführen dieses Codes erzeugt das richtige Dokument, aber ich erhalte eine Warnung:
LaTeX Warning: Unused global option(s):
[notation,foo].
Mein Paket hat diese Optionen eindeutig erkannt und verwendet ( notation
der Einfachheit halber zeige ich nur die Verwendung der Option). Warum erhalte ich also diese Warnung und warum gibt es für die erste Option keine Warnung lang=hebrew
?
Wenn Sie die Reihenfolge der Optionen ändern, \documentclass[notation=math, lang=hebrew, foo=baz]{demo-cls}
ändert sich die Warnung zu
LaTeX Warning: Unused global option(s):
[lang,foo].
Das Dokument lässt sich jedoch weiterhin kompilieren und sieht gut aus.
Warum erhalte ich für alle Optionen außer der ersten Warnungen und wie kann ich diese Warnungen beheben?
Antwort1
Dies ist ein Fehler bei der Handhabung der Optionslisten im neuen, auf l3keys basierenden Optionshandler. Sie können die falsche Warnung vermeiden, indem Sie sicherstellen, dass zwischen den Optionen kein übermäßiger Leerraum vorhanden ist.
\documentclass[lang=hebrew,notation=math,foo=baz]{demo-cls}
in diesem Beispiel.
Der Code wurde in den Latex-Quellen bereits korrigiert (in einer Pull-Anfrage von @Skillmon), daher wird er in einer kommenden Version behoben.
Fehlerbericht
https://github.com/latex3/latex2e/issues/1238
Pull Request mit Fix
https://github.com/latex3/latex2e/pull/1239
Danke für den Bericht und die saubere Testdatei.