
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
kvoptions
das, das Sie verwendet haben. Dann sollte anstelle von \ProcessOptions
dem, das keine Schlüsselwertoptionen kennt, der Paketbefehl wie \ProcessKeyvalOptions
verwendet 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 \footnote
verwendet 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}
Die Ausgabe mit condensed
oder condensed=true
ohne Option ist