独自のスタイルファイルでbool変数を渡すとエラーが発生する

独自のスタイルファイルでbool変数を渡すとエラーが発生する

脚注をカスタマイズするためのパッケージを作成しました。現時点では、重要な機能は 1 つだけです。脚注のフォントを変更するために、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

ドキュメントのプリアンブルで condensed 値を渡さなくても問題なく動作しますが、\usepackage[condensed=true]{AFWfnotetext}ドキュメントで use: を使用すると、次のメッセージが表示されます。

Unknown option `condensed=true' for package `AFWfnotetext'. \ProcessOptions\relax

私は LaTeX でのプログラミングが初めてなので、何が起こっているのか理解できませんでした。

ご協力いただければ幸いです。

前もって感謝します

答え1

LaTeX カーネルはキー値オプションをサポートしていません。そのため、使用したようなパッケージがあります 。キー値オプションを認識しないkvoptions代わりに、次のようなパッケージ コマンドを使用する必要があります。\ProcessOptions\ProcessKeyvalOptions

\ExecuteOptions{condensed}\DeclareBoolOption[true]{condensed}すでにオプションが で初期化されているため、ここでは意味がありませんtrue

オプションの宣言、使用法、およびオプションのアクションの順序が正しくありません。

  • 最初に: オプションが定義されます ( \SetKeyvalOptions\DelareBoolOption)。
  • 2番目: オプションが処理されます(\ProcessOptions
  • 3番目:評価フェーズでは、オプション値( )に応じてコードが実行されます\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}

ここに画像の説明を入力してください

condensedcondensed=trueまたはオプションなしの出力は次のようになります。

ここに画像の説明を入力してください

関連情報