Почему я получаю «предупреждение о неиспользуемых глобальных параметрах» для параметров, перенаправленных в пакет, за исключением первого параметра?

Почему я получаю «предупреждение о неиспользуемых глобальных параметрах» для параметров, перенаправленных в пакет, за исключением первого параметра?

Я работаю над пользовательским пакетом для моих макросов и сочетаний клавиш, а также над пользовательским классом для моего предпочитаемого стиля документа. Я использую 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}

в этом примере.

Код уже исправлен (в запросе на извлечение от @Skillmon) в исходниках Latex, поэтому он будет исправлен в следующем выпуске.

Отчет об ошибке

https://github.com/latex3/latex2e/issues/1238

Запрос на извлечение с исправлением

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

Спасибо за отчет и чистый тестовый файл.

Связанный контент