我编写了一个包来自定义脚注。目前只有一个功能很重要:我想提供一个 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
类似这样的软件包命令,而不是不知道键值选项的命令。\ProcessKeyvalOptions
\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
,而您的方法则不能。
\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
或根本没有选项的输出是