
Я написал пакет для настройки моих сносок. Пока что важна только одна функция: я хочу задать параметр bool для изменения шрифта моих сносок.
Файл стиля выглядит так:
\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
Если не передавать сжатое значение в преамбуле документа, то все работает нормально, но когда я использую: \usepackage[condensed=true]{AFWfnotetext}
в своем документе, я получаю следующее сообщение:
Unknown option `condensed=true' for package `AFWfnotetext'. \ProcessOptions\relax
Я новичок в программировании в LaTeX и не могу понять, что происходит.
Я надеюсь, что вы можете мне помочь.
заранее спасибо
решение1
Ядро LaTeX не поддерживает параметры ключ-значение. Поэтому есть пакеты, подобные
kvoptions
тем, которые вы использовали. Тогда вместо \ProcessOptions
that не знает о параметрах ключ-значение, \ProcessKeyvalOptions
следует использовать команду пакета like.
\ExecuteOptions{condensed}
здесь не имеет смысла, поскольку \DeclareBoolOption[true]{condensed}
уже инициализирует опцию с помощью true
.
Порядок объявления, использования и действий опций нарушен.
- Во-первых: определены параметры (
\SetKeyvalOptions
,\DelareBoolOption
). - Второе: Варианты обрабатываются (
\ProcessOptions
) - Третье: На этапе оценки код выполняется в зависимости от значений параметров (
\ifAFW@condensed
).
решение2
Вы можете использовать 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}} }
}
Примечание: Я использовал , \itshape
потому что не знаю о \textcn
(пакет должен предоставить определение).
Вот тестовый файл с уменьшенной высотой текста для создания уменьшенной картинки. Обратите внимание, что \footnote
можно использовать необязательный аргумент to, чего нельзя сделать с вашим подходом.
\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}
Вывод с опцией condensed
или condensed=true
без нее будет следующим: