Beim Übergeben der Bool-Variable in meiner eigenen Stildatei tritt ein Fehler auf.

Beim Übergeben der Bool-Variable in meiner eigenen Stildatei tritt ein Fehler auf.

Ich habe ein Paket zum Anpassen meiner Fußnoten geschrieben. Im Moment ist nur eine Funktion wichtig: Ich möchte einen Bool-Parameter angeben, um die Schriftart meiner Fußnoten zu ändern.

Die Style-Datei sieht folgendermaßen aus:

\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

Das Nichtübergeben des komprimierten Wertes in der Präambel meines Dokuments funktioniert einwandfrei, aber wenn ich \usepackage[condensed=true]{AFWfnotetext}in meinem Dokument Folgendes verwende: erhalte ich die folgende Meldung:

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

Ich bin neu in der Programmierung in LaTeX und konnte nicht herausfinden, was los ist.

Ich hoffe ihr könnt mir helfen.

Dank im Voraus

Antwort1

Der LaTeX-Kernel unterstützt keine Schlüsselwertoptionen. Daher gibt es Pakete wie kvoptionsdas, das Sie verwendet haben. Dann sollte anstelle von \ProcessOptionsdem, das keine Schlüsselwertoptionen kennt, der Paketbefehl wie \ProcessKeyvalOptionsverwendet werden.

\ExecuteOptions{condensed}macht hier keinen Sinn, da \DeclareBoolOption[true]{condensed}die Option bereits mit initialisiert wird true.

Die Reihenfolge der Optionsdeklaration, -verwendung und -aktionen ist nicht korrekt.

  • Erstens: Die Optionen sind definiert ( \SetKeyvalOptions, \DelareBoolOption).
  • Zweitens: Die Optionen werden verarbeitet ( \ProcessOptions)
  • Drittens: In der Evaluierungsphase wird der Code abhängig von den Optionwerten ausgeführt ( \ifAFW@condensed).

Antwort2

Sie können Folgendes verwenden 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}} }
 }

Hinweis: Ich habe es verwendet \itshape, weil ich es nicht kenne \textcn(das Paket sollte die Definition bereitstellen).

Hier ist eine Testdatei mit reduzierter Texthöhe, um ein kleineres Bild zu erstellen. Beachten Sie, dass das optionale Argument \footnoteverwendet werden kann, was bei Ihrem Ansatz nicht möglich ist.

\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}

Bildbeschreibung hier eingeben

Die Ausgabe mit condensedoder condensed=trueohne Option ist

Bildbeschreibung hier eingeben

verwandte Informationen