
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
kvoptions
esse que você usou. Então, em vez de \ProcessOptions
não saber sobre as opções de valor-chave, o comando package like \ProcessKeyvalOptions
deve 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 \itshape
porque 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 \footnote
pode 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}
A saída com condensed
, condensed=true
ou nenhuma opção, é