Übergeben (nur) anderer Optionen bei Verwendung von pgfopts

Übergeben (nur) anderer Optionen bei Verwendung von pgfopts

Ich möchte pgfopts (und daher pgfkeys) verwenden, wenn ich eine Klasse mit neuen Optionen anpasse, die alten behalte und einige davon verwende.

Hier ist ein vereinfachtes Beispiel mit einer Klasse „exa“, die „article“ um eine neue Option erweitert und auch die Option „a5paper“ festlegt.

\begin{filecontents}{exa.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{exa}[2014/03/19 exa]
% As "article" with "a5paper" set, and an extra option "lastword".
\RequirePackage{pgfopts}
\pgfkeys{
  /exa/.cd,
  lastword/.code=\AtEndDocument{\par The last word is #1.}
}
\ProcessPgfOptions{/exa}
\PassOptionsToClass{a5paper}{article}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions
\LoadClass{article}
\end{filecontents}

\documentclass[lastword=bar,twocolumn]{exa}

\usepackage{blindtext}
\begin{document}
\blindtext
\end{document}

Die drei Optionen funktionieren hier wie vorgesehen: „a5paper“ wird von der Klasse gesetzt, „twocolumn“ wird an „article“ gesendet und die neue Option „lastword“. Es wird jedoch eine Warnung über die nicht verwendete globale Option [„lastword=bar]“ ausgegeben.

Wie kann ich alle von ProcessPgfOptions berücksichtigten Optionen entfernen, sodass nur der Rest an den „Artikel“ weitergeleitet wird?

Antwort1

Sie vermischen die beiden Methoden zum Festlegen von Optionen, was zu der Warnung führt.

\begin{filecontents}{exa.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{exa}[2014/03/19 exa]
% As "article" with "a5paper" set, and an extra option "lastword".
\RequirePackage{pgfopts}

%%% initialize the options
\def\exa@classoptions{a5paper}

\pgfkeys{
  /exa/.cd,
  lastword/.code=\AtEndDocument{\par The last word is #1.},
  %%% unknown keys are assumed to be options to be passed to the class
  .unknown/.code={\edef\exa@classoptions{\exa@classoptions,\pgfkeyscurrentname}}
}
\ProcessPgfOptions{/exa}
\LoadClass[\exa@classoptions]{article}

\end{filecontents}

\documentclass[lastword=bar,twocolumn]{exa}

\usepackage{lipsum}
\begin{document}
\lipsum[1-10]
\end{document}

verwandte Informationen