
Estou trabalhando em um pacote personalizado para minhas macros e atalhos e em uma classe personalizada para meu estilo preferido de documento. Estou usando DeclareKeys
para definir opções de valores-chave em meu pacote e, em seguida, minha classe, que carrega esse pacote, encaminha as opções para ele globalmente, encaminhando-as para a classe base (artigo). Funciona bem, mas recebo avisos estranhos sobre opções globais não utilizadas. Aqui está o código:
% 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}
A execução deste código produz o documento correto, mas recebo um aviso:
LaTeX Warning: Unused global option(s):
[notation,foo].
Meu pacote claramente pegou essas opções e as usou (eu só mostro o uso da notation
opção para simplificar), então por que recebo esse aviso e por que não há aviso para a primeira opção lang=hebrew
?
Alterar a ordem das opções para \documentclass[notation=math, lang=hebrew, foo=baz]{demo-cls}
altera o aviso para
LaTeX Warning: Unused global option(s):
[lang,foo].
O documento ainda é compilado e parece bom.
Por que recebo avisos para todas as opções, exceto a primeira, e como posso resolver esses avisos?
Responder1
Este é um bug ao lidar com as listas de opções no novo manipulador de opções baseado em l3keys. Você pode evitar o aviso falso garantindo que não haja excesso de espaço em branco entre as opções, então
\documentclass[lang=hebrew,notation=math,foo=baz]{demo-cls}
neste exemplo.
O código já foi corrigido (em uma solicitação pull de @Skillmon) nas fontes de látex, portanto será corrigido em uma versão futura.
Relatório de erro
https://github.com/latex3/latex2e/issues/1238
Solicitação pull com correção
https://github.com/latex3/latex2e/pull/1239
Obrigado pelo relatório e arquivo de teste limpo.