最初のオプションを除いて、パッケージに転送されたオプションに対して「未使用のグローバル オプションの警告」が表示されるのはなぜですか?

最初のオプションを除いて、パッケージに転送されたオプションに対して「未使用のグローバル オプションの警告」が表示されるのはなぜですか?

私はマクロとショートカット用のカスタム パッケージと、ドキュメントの好みのスタイル用のカスタム クラスを作成中です。 を使用してDeclareKeysパッケージ内のキー値オプションを定義し、このパッケージをロードするクラスがオプションを基本クラス (記事) に転送することで、そのオプションをグローバルに転送します。これはうまく機能しますが、未使用のグローバル オプションに関する奇妙な警告が表示されます。コードは次のとおりです。

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

このコードを実行すると正しいドキュメントが生成されますが、警告が表示されます。

LaTeX Warning: Unused global option(s):
    [notation,foo].

私のパッケージは明らかにこれらのオプションを選択して使用しました (notationわかりやすくするためにオプションの使用方法のみを示しています)。では、なぜこの警告が表示され、最初のオプションに対して警告が表示されないのでしょうかlang=hebrew?

オプションの順序を変更すると、\documentclass[notation=math, lang=hebrew, foo=baz]{demo-cls}警告が次のように変わります。

LaTeX Warning: Unused global option(s):
    [lang,foo].

ただし、ドキュメントはコンパイルされ、見た目も問題ありません。

最初のオプションを除くすべてのオプションに対して警告が表示されるのはなぜですか? また、これらの警告を解決するにはどうすればよいですか?

答え1

これは、新しいl3keysベースのオプションハンドラのオプションリストの処理に関するバグです。オプション間に余分な空白がないようにすることで、誤った警告を回避できます。

\documentclass[lang=hebrew,notation=math,foo=baz]{demo-cls}

この例では。

コードはすでに LaTeX ソースで修正されています (@Skillmon からのプル リクエスト) ので、今後のリリースで修正される予定です。

バグレポート

翻訳元: github.com/latex3/latex2e/issues/1238

修正を含むプルリクエスト

https://github.com/latex3/latex2e/pull/1239

レポートとクリーンなテスト ファイルをありがとうございます。

関連情報