
我寫了一個包來定制我的腳註。目前只有一個功能很重要:我想提供一個布林參數來更改腳註的字體。
樣式文件如下所示:
\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
可以使用可選參數 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
或根本沒有選項的輸出是