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