Recebo um erro ao passar a variável bool em meu próprio arquivo de estilo

Recebo um erro ao passar a variável bool em meu próprio arquivo de estilo

Eu escrevi um pacote para personalizar minhas notas de rodapé. Por enquanto, apenas um recurso importa: quero fornecer um parâmetro bool para alterar a fonte das minhas notas de rodapé.

O arquivo de estilo fica assim:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{AFWfnotetext}[2019/07/07 v1.1 A footnotes]

\RequirePackage{sectsty}
\RequirePackage{kvoptions}

\SetupKeyvalOptions{
    family=AFW,
    prefix=AFW@
}%

\DeclareBoolOption[true]{condensed}
%\ProcessLocalKeyvalOptions*


\let\oldfootnote\footnote

\ifAFW@condensed
    \RenewDocumentCommand{\footnote}{ O{} m }
    {\oldfootnote{\textcn{#2}}}
\else
    \RenewDocumentCommand{\footnote}{ O{} m }
    {\oldfootnote{#2}}
\fi

\ExecuteOptions{condensed}

\ProcessOptions\relax

Não passar o valor condensado no preâmbulo do meu documento funciona bem, mas quando uso: \usepackage[condensed=true]{AFWfnotetext}no meu documento recebo a seguinte mensagem:

Unknown option `condensed=true' for package `AFWfnotetext'. \ProcessOptions\relax

Sou novo em programação em LaTeX e não consegui entender o que está acontecendo.

Espero que você possa me ajudar.

desde já, obrigado

Responder1

O kernel LaTeX não suporta opções de valores-chave. Portanto, existem pacotes como kvoptionsesse que você usou. Então, em vez de \ProcessOptionsnão saber sobre as opções de valor-chave, o comando package like \ProcessKeyvalOptionsdeve ser usado.

\ExecuteOptions{condensed}não faz sentido aqui, pois \DeclareBoolOption[true]{condensed}já inicializa a opção com true.

A ordem de declaração de opções, uso e ações de opções estão fora de ordem.

  • Primeiro: As opções são definidas ( \SetKeyvalOptions, \DelareBoolOption).
  • Segundo: As opções são processadas ( \ProcessOptions)
  • Terceiro: Na fase de avaliação, o código é executado dependendo dos valores das opções ( \ifAFW@condensed).

Responder2

Você pode usar l3keys2e:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{AFWfnotetext}[2019/07/07 v1.1 A footnotes]

\RequirePackage{l3keys2e}
\RequirePackage{xparse}

\ExplSyntaxOn

\keys_define:nn { AFWfnotetext }
 {
  condensed .bool_set:N = \g_AFWfnotetext_condensed_bool,
  condensed .default:n  = true,
  condensed .initial:n  = true,
 }

\ProcessKeysPackageOptions { AFWfnotetext }

\cs_set_eq:cc { latex@footnotetext } { @footnotetext }

\bool_if:NT \g_AFWfnotetext_condensed_bool
 {
  \cs_set:Npn \@footnotetext #1 { \latex@footnotetext{\textit[#1}} }
 }

Obs: usei \itshapeporque não conheço \textcn(o pacote deve fornecer a definição).

Aqui está um arquivo de teste, com altura de texto reduzida para fazer uma imagem menor. Observe que o argumento opcional to \footnotepode ser usado, o que não pode acontecer com sua abordagem.

\documentclass{article}

\usepackage[
%  condensed,
%  condensed=true,
  condensed=false,
]{AFWfnotetext}

\setlength{\textheight}{4cm}

\begin{document}

Test\footnote{Test for footnotes}

Test\footnote[4]{Another test}

\end{document}

insira a descrição da imagem aqui

A saída com condensed, condensed=trueou nenhuma opção, é

insira a descrição da imagem aqui

informação relacionada