Warum erhalte ich für an ein Paket weitergeleitete Optionen mit Ausnahme der ersten Option eine „Warnung zu nicht verwendeten globalen Optionen“?

Warum erhalte ich für an ein Paket weitergeleitete Optionen mit Ausnahme der ersten Option eine „Warnung zu nicht verwendeten globalen Optionen“?

Ich arbeite an einem benutzerdefinierten Paket für meine Makros und Tastenkombinationen und einer benutzerdefinierten Klasse für meinen bevorzugten Dokumentstil. Ich verwende es, DeclareKeysum 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 ( notationder 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.

verwandte Informationen