在我自己样式文件中传递 bool 变量时出现错误

在我自己样式文件中传递 bool 变量时出现错误

我编写了一个包来自定义脚注。目前只有一个功能很重要:我想提供一个 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或根本没有选项的输出是

在此处输入图片描述

相关内容