%% %% This is file `kvoptions.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% kvoptions.dtx (with options: `package') %% %% This is a generated file. %% %% Copyright (C) 2004, 2006, 2007, 2009 by %% Heiko Oberdiek %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either %% version 1.3 of this license or (at your option) any later %% version. The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of %% LaTeX version 2005/12/01 or later. %% %% This work has the LPPL maintenance status "maintained". %% %% This Current Maintainer of this work is Heiko Oberdiek. %% %% This work consists of the main source file kvoptions.dtx %% and the derived files %% kvoptions.sty, kvoptions.pdf, kvoptions.ins, kvoptions.drv, %% kvoptions-patch.sty, example-mycolorsetup.sty, %% kvoptions-test1.tex, kvoptions-test2.tex. %% %% No we don't need the option 'color'. %% With color support option 'emphcolor' will dynamically %% change the color of \emph statements. \begingroup \catcode44 12 % , \catcode45 12 % - \catcode46 12 % . \catcode58 12 % : \catcode64 11 % @ \expandafter\let\expandafter\x\csname ver@kvoptions.sty\endcsname \ifcase 0% \ifx\x\relax % plain \else \ifx\x\empty % LaTeX \else 1% \fi \fi \else \catcode35 6 % # \catcode123 1 % { \catcode125 2 % } \expandafter\ifx\csname PackageInfo\endcsname\relax \def\x#1#2{% \immediate\write-1{Package #1 Info: #2.}% }% \else \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% \fi \x{kvoptions}{The package is already loaded}% \endgroup \expandafter\endinput \fi \endgroup \begingroup \catcode35 6 % # \catcode40 12 % ( \catcode41 12 % ) \catcode44 12 % , \catcode45 12 % - \catcode46 12 % . \catcode47 12 % / \catcode58 12 % : \catcode64 11 % @ \catcode123 1 % { \catcode125 2 % } \expandafter\ifx\csname ProvidesPackage\endcsname\relax \def\x#1#2#3[#4]{\endgroup \immediate\write-1{Package: #3 #4}% \xdef#1{#4}% }% \else \def\x#1#2[#3]{\endgroup #2[{#3}]% \ifx#1\@undefined \xdef#1{#3}% \fi \ifx#1\relax \xdef#1{#3}% \fi }% \fi \expandafter\x\csname ver@kvoptions.sty\endcsname \ProvidesPackage{kvoptions}% [2009/07/17 v3.2 Keyval support for LaTeX options (HO)] \begingroup \catcode123 1 % { \catcode125 2 % } \def\x{\endgroup \expandafter\edef\csname KVO@AtEnd\endcsname{% \catcode35 \the\catcode35\relax \catcode64 \the\catcode64\relax \catcode123 \the\catcode123\relax \catcode125 \the\catcode125\relax }% }% \x \catcode35 6 % # \catcode64 11 % @ \catcode123 1 % { \catcode125 2 % } \def\TMP@EnsureCode#1#2{% \edef\KVO@AtEnd{% \KVO@AtEnd \catcode#1 \the\catcode#1\relax }% \catcode#1 #2\relax } \TMP@EnsureCode{1}{14}% ^^A (comment) \TMP@EnsureCode{2}{14}% ^^A (comment) \TMP@EnsureCode{33}{12}% ! \TMP@EnsureCode{39}{12}% ' \TMP@EnsureCode{40}{12}% ( \TMP@EnsureCode{41}{12}% ) \TMP@EnsureCode{42}{12}% * \TMP@EnsureCode{44}{12}% , \TMP@EnsureCode{45}{12}% - \TMP@EnsureCode{46}{12}% . \TMP@EnsureCode{47}{12}% / \TMP@EnsureCode{58}{12}% : \TMP@EnsureCode{61}{12}% = \TMP@EnsureCode{62}{12}% > \TMP@EnsureCode{94}{7}% ^ (superscript) \TMP@EnsureCode{96}{12}% ` \@ifundefined{define@key}{% \RequirePackage{keyval}\relax }{} \@ifundefined{@onelevel@sanitize}{% \def\@onelevel@sanitize#1{% \edef#1{\expandafter\strip@prefix\meaning#1}% }% }{} \@ifundefined{strip@prefix}{% \def\strip@prefix#1>{}% }{} \@ifundefined{@x@protect}{% \def\@x@protect#1\fi#2#3{% \fi\protect#1% }% \let\@typeset@protect\relax }{} \@ifundefined{@currname}{% \def\@currname{}% }{} \@ifundefined{@currext}{% \def\@currext{}% }{} \DeclareOption{debugshow}{\catcode\@ne=9 } \DeclareOption{patch}{% \AtEndOfPackage{% \RequirePackage{kvoptions-patch}[2009/07/17]% }% } \ProcessOptions\relax \define@key{KVO}{family}{% \expandafter\edef\csname KVO@family@% \@currname.\@currext\endcsname{#1}% } \def\KVO@family{% \@ifundefined{KVO@family@\@currname.\@currext}{% \@currname }{% \csname KVO@family@\@currname.\@currext\endcsname }% } \define@key{KVO}{prefix}{% \expandafter\edef\csname KVO@prefix@% \@currname.\@currext\endcsname{#1}% } \def\KVO@prefix{% \@ifundefined{KVO@prefix@\@currname.\@currext}{% \@currname @% }{% \csname KVO@prefix@\@currname.\@currext\endcsname }% } \newcommand*{\SetupKeyvalOptions}{% \setkeys{KVO}% } \newcommand*{\DeclareBoolOption}[2][false]{% \KVO@ifdefinable{if\KVO@prefix#2}{% \KVO@ifdefinable{\KVO@prefix#2true}{% \KVO@ifdefinable{\KVO@prefix#2false}{% \csname newif\expandafter\endcsname \csname if\KVO@prefix#2\endcsname \@ifundefined{\KVO@prefix#2#1}{% \PackageWarning{kvoptions}{% Initialization of option `#2' failed,\MessageBreak cannot set boolean option to `#1',\MessageBreak use `true' or `false', now using `false'% }% }{% \csname\KVO@prefix#2#1\endcsname }% \begingroup \edef\x{\endgroup \noexpand\define@key{\KVO@family}{#2}[true]{% \noexpand\KVO@boolkey{\@currname}% \ifx\@currext\@clsextension \noexpand\@clsextension \else \noexpand\@pkgextension \fi {\KVO@prefix}{#2}{####1}% }% }% \x }% }% }% } \newcommand*{\DeclareComplementaryOption}[2]{% \@ifundefined{if\KVO@prefix#2}{% \PackageError{kvoptions}{% Cannot generate option code for `#1',\MessageBreak parent switch `#2' does not exist% }{% You are inside % \ifx\@currext\@clsextension class\else package\fi\space `\@currname.\@currext'.\MessageBreak `\KVO@family' is used as familiy % for the keyval options.\MessageBreak `\KVO@prefix' serves as prefix % for internal switch macros.\MessageBreak \MessageBreak \@ehc }% }{% \KVO@ifdefinable{\KVO@prefix#1true}{% \KVO@ifdefinable{\KVO@prefix#1false}{% \expandafter\let\csname\KVO@prefix#1false\expandafter\endcsname \csname\KVO@prefix#2true\endcsname \expandafter\let\csname\KVO@prefix#1true\expandafter\endcsname \csname\KVO@prefix#2false\endcsname \begingroup \edef\x{\endgroup \noexpand\define@key{\KVO@family}{#1}[true]{% \noexpand\KVO@boolkey{\@currname}% \ifx\@currext\@clsextension \noexpand\@clsextension \else \noexpand\@pkgextension \fi {\KVO@prefix}{#1}{####1}% }% }% \x }% }% }% } \def\KVO@ifdefinable#1{% \expandafter\@ifdefinable\csname #1\endcsname } \def\KVO@boolkey#1#2#3#4#5{% \edef\KVO@param{#5}% \@onelevel@sanitize\KVO@param \ifx\KVO@param\KVO@true \expandafter\@firstofone \else \ifx\KVO@param\KVO@false \expandafter\expandafter\expandafter\@firstofone \else \ifx#2\@clsextension \expandafter\ClassWarning \else \expandafter\PackageWarning \fi {#1}{% Value `\KVO@param' is not supported by\MessageBreak option `#4'% }% \expandafter\expandafter\expandafter\@gobble \fi \fi {% ^^A\ifx#2\@clsextension ^^A \expandafter\ClassInfo ^^A\else ^^A \expandafter\PackageInfo ^^A\fi ^^A{#1}{[option] #4=\KVO@param}% \csname#3#4\KVO@param\endcsname }% } \def\KVO@true{true} \def\KVO@false{false} \@onelevel@sanitize\KVO@true \@onelevel@sanitize\KVO@false \newcommand*{\DeclareStringOption}[2][]{% \@ifnextchar[{% \KVO@DeclareStringOption{#1}{#2}@% }{% \KVO@DeclareStringOption{#1}{#2}{}[]% }% } \def\KVO@DeclareStringOption#1#2#3[#4]{% \KVO@ifdefinable{\KVO@prefix#2}{% \@namedef{\KVO@prefix#2}{#1}% \begingroup \ifx\\#3\\% \toks@{}% \else \toks@{[{#4}]}% \fi \edef\x{\endgroup \noexpand\define@key{\KVO@family}{#2}\the\toks@{% ^^A\begingroup ^^A \toks@{####1}% ^^A \ifx\@currext\@clsextension ^^A \noexpand\ClassInfo ^^A \else ^^A \noexpand\PackageInfo ^^A \fi ^^A {\@currname}{% ^^A [option] #2={\noexpand\the\toks@}% ^^A }% ^^A\endgroup \noexpand\def \expandafter\noexpand\csname\KVO@prefix#2\endcsname{####1}% }% }% \x }% } \newcommand*{\DeclareVoidOption}[1]{% \begingroup \let\next\@gobbletwo \KVO@ifdefinable{\KVO@prefix#1}{% \let\next\@firstofone }% \expandafter\endgroup \next{% \begingroup \edef\x{\endgroup \noexpand\define@key{\KVO@family}{#1}[\KVO@VOID@]{% \noexpand\KVO@voidkey{\@currname}% \ifx\@currext\@clsextension \noexpand\@clsextension \else \noexpand\@pkgextension \fi {#1}% {####1}% \expandafter\noexpand\csname\KVO@prefix#1\endcsname }% }% \x \@namedef{\KVO@prefix#1}% }% } \def\KVO@VOID@{@VOID@} \def\KVO@voidkey#1#2#3#4{% \def\CurrentOption{#3}% \begingroup \def\x{#4}% \expandafter\endgroup \ifx\x\KVO@VOID@ \else \ifx#2\@clsextension \expandafter\ClassWarning \else \expandafter\PackageWarning \fi {#1}{% Unexpected value for option `#3'\MessageBreak is ignored% }% \fi ^^A\ifx#2\@clsextension ^^A \expandafter\ClassInfo ^^A\else ^^A \expandafter\PackageInfo ^^A\fi ^^A{#1}{[option] #3}% } \newcommand*{\DeclareDefaultOption}{% \@namedef{KVO@default@\@currname.\@currext}% } \SetupKeyvalOptions{% family=KVOdyn,% prefix=KVOdyn@% } \DeclareBoolOption[true]{global} \DeclareComplementaryOption{local}{global} \DeclareStringOption[undef]{action} \let\KVOdyn@name\relax \let\KVOdyn@ext\@empty \define@key{KVOdyn}{class}{% \def\KVOdyn@name{#1}% \let\KVOdyn@ext\@clsextension } \define@key{KVOdyn}{package}{% \def\KVOdyn@name{#1}% \let\KVOdyn@ext\@pkgextension } \newcommand*{\DisableKeyvalOption}[3][]{% \begingroup \setkeys{KVOdyn}{#1}% \def\x{\endgroup}% \@ifundefined{KVO@action@\KVOdyn@action}{% \PackageError{kvoptions}{% Unknown disable action % `\expandafter\strip@prefix\meaning\KVOdyn@action'\MessageBreak for option `#3' in keyval family '#2'% }\@ehc }{% \csname KVO@action@\KVOdyn@action\endcsname{#2}{#3}% }% \x } \def\KVO@action@undef#1#2{% \edef\x{\endgroup \ifKVOdyn@global\global\fi \let \expandafter\noexpand\csname KV@#1@#2\endcsname \relax \ifKVOdyn@global\global\fi \let \expandafter\noexpand\csname KV@#1@#2@default\endcsname \relax }% ^^A\PackageInfo{kvoptions}{% ^^A [option] key `#2' of family `#1'\MessageBreak ^^A is disabled (undef, \ifKVOdyn@global global\else local\fi)% ^^A}% } \def\KVO@action@ignore#1#2{% \edef\x{\endgroup \ifKVOdyn@global\global\fi \let \expandafter\noexpand\csname KV@#1@#2\endcsname \noexpand\@gobble \ifKVOdyn@global\global\fi \let \expandafter\noexpand\csname KV@#1@#2@default\endcsname \noexpand\@empty }% ^^A\PackageInfo{kvoptions}{% ^^A [option] key `#2' of family `#1'\MessageBreak ^^A is disabled (ignore, \ifKVOdyn@global global\else local\fi)% ^^A}% } \def\KVO@action@error{% \KVO@do@action{error}% } \def\KVO@action@warning{% \KVO@do@action{warning}% } \def\KVO@do@action#1#2#3{% \ifx\KVOdyn@name\relax \PackageError{kvoptions}{% Action type `#1' needs package/class name\MessageBreak for key `#3' in family `#2'% }\@ehc \else \edef\x{\endgroup \noexpand\define@key{#2}{#3}[]{% \expandafter\noexpand\csname KVO@disable@#1\endcsname {\KVOdyn@name}\noexpand\KVOdyn@ext{#3}% }% \ifKVOdyn@global \global\let \expandafter\noexpand\csname KV@#2@#3\endcsname \expandafter\noexpand\csname KV@#2@#3\endcsname \global\let \expandafter\noexpand\csname KV@#2@#3@default\endcsname \expandafter\noexpand\csname KV@#2@#3@default\endcsname \fi }% ^^A\ifx\KVOdyn@ext\@clsextension ^^A \expandafter\ClassInfo ^^A\else ^^A \expandafter\PackageInfo ^^A\fi ^^A{\KVOdyn@name}{% ^^A [option] key `#3' of family `#2'\MessageBreak ^^A is disabled (#1, \ifKVOdyn@global global\else local\fi)% ^^A}% \fi } \def\KVO@disable@error#1#2#3{% \ifx#2\@clsextension \expandafter\ClassError \else \expandafter\PackageError \fi {#1}{% Option `#3' is given too late,\MessageBreak now the option is ignored% }\@ehc } \def\KVO@disable@warning#1#2#3{% \ifx#2\@clsextension \expandafter\ClassWarning \else \expandafter\PackageWarning \fi {#1}{% Option `#3' is already consumed\MessageBreak and has no effect% }% } \newcommand*{\ProcessKeyvalOptions}{% \@ifstar{% \begingroup \edef\x{\endgroup \noexpand\KVO@ProcessKeyvalOptions{\KVO@family}% }% \x }% \KVO@ProcessKeyvalOptions } \def\KVO@ProcessKeyvalOptions#1{% \let\@tempc\relax \let\KVO@temp\@empty \ifx\@currext\@clsextension \else \ifx\@classoptionslist\relax \else \@for\KVO@CurrentOption:=\@classoptionslist\do{% \@ifundefined{KV@#1@\expandafter\KVO@getkey \KVO@CurrentOption=\@nil}{% }{% \ifx\KVO@Patch Y% \edef\KVO@temp{% \etex@unexpanded\expandafter{% \KVO@temp }% ,% \etex@unexpanded\expandafter{% \KVO@CurrentOption }% ,% }% \@onelevel@sanitize\KVO@CurrentOption \else \edef\KVO@temp{% \KVO@temp ,% \KVO@CurrentOption ,% }% \fi \@expandtwoargs\@removeelement\KVO@CurrentOption \@unusedoptionlist\@unusedoptionlist }% }% \fi \fi \begingroup \toks\tw@{}% \@ifundefined{opt@\@currname.\@currext}{% \toks@\expandafter{\KVO@temp}% }{% \toks@\expandafter\expandafter\expandafter{% \csname opt@\@currname.\@currext\endcsname }% \ifx\@currext\@clsextension \edef\CurrentOption{\the\toks@}% \toks@\expandafter{\KVO@temp}% \@for\CurrentOption:=\CurrentOption\do{% \@ifundefined{% KV@#1@\expandafter\KVO@getkey\CurrentOption=\@nil }{% \ifx\KVO@Patch Y% \@onelevel@sanitize\CurrentOption \fi \ifx\@unusedoptionlist\@empty \global\let\@unusedoptionlist\CurrentOption \else \expandafter\expandafter\expandafter\gdef \expandafter\expandafter\expandafter\@unusedoptionlist \expandafter\expandafter\expandafter{% \expandafter\@unusedoptionlist \expandafter,\CurrentOption }% \fi }{% \toks@\expandafter{% \the\expandafter\toks@\expandafter,\CurrentOption }% }% }% \else \@ifundefined{KVO@default@\@currname.\@currext}{% \toks@\expandafter\expandafter\expandafter{% \expandafter\KVO@temp\the\toks@ }% }{% \edef\CurrentOption{\the\toks@}% \toks@\expandafter{\KVO@temp}% \@for\CurrentOption:=\CurrentOption\do{% \@ifundefined{% KV@#1@\expandafter\KVO@getkey\CurrentOption=\@nil }{% \toks\tw@\expandafter{% \the\toks\expandafter\tw@\expandafter,\CurrentOption }% }{% \toks@\expandafter{% \the\expandafter\toks@\expandafter,\CurrentOption }% }% }% }% \fi }% \edef\KVO@temp{\endgroup \noexpand\KVO@calldefault{\the\toks\tw@}% \noexpand\setkeys{#1}{\the\toks@}% }% \KVO@temp \let\CurrentOption\@empty \AtEndOfPackage{\let\@unprocessedoptions\relax}% } \newcommand*{\ProcessLocalKeyvalOptions}{% \@ifstar{% \begingroup \edef\x{\endgroup \noexpand\KVO@ProcessLocalKeyvalOptions{\KVO@family}% }% \x }% \KVO@ProcessLocalKeyvalOptions } \def\KVO@ProcessLocalKeyvalOptions#1{% \let\@tempc\relax \let\KVO@temp\@empty \ifx\@currext\@pkgextension \else \PackageError{kvoptions}{% \string\ProcessLocalKeyvalOptions is intended for packages only% }\@ehc \fi \begingroup \toks\tw@{}% \@ifundefined{opt@\@currname.\@currext}{% \toks@\expandafter{\KVO@temp}% }{% \toks@\expandafter\expandafter\expandafter{% \csname opt@\@currname.\@currext\endcsname }% \@ifundefined{KVO@default@\@currname.\@currext}{% \toks@\expandafter\expandafter\expandafter{% \expandafter\KVO@temp\the\toks@ }% }{% \edef\CurrentOption{\the\toks@}% \toks@\expandafter{\KVO@temp}% \@for\CurrentOption:=\CurrentOption\do{% \@ifundefined{% KV@#1@\expandafter\KVO@getkey\CurrentOption=\@nil }{% \toks\tw@\expandafter{% \the\toks\expandafter\tw@\expandafter,\CurrentOption }% }{% \toks@\expandafter{% \the\expandafter\toks@\expandafter,\CurrentOption }% }% }% }% \fi }% \edef\KVO@temp{\endgroup \noexpand\KVO@calldefault{\the\toks\tw@}% \noexpand\setkeys{#1}{\the\toks@}% }% \KVO@temp \let\CurrentOption\@empty \AtEndOfPackage{\let\@unprocessedoptions\relax}% } \def\KVO@getkey#1=#2\@nil{#1} \def\KVO@calldefault#1{% \begingroup \def\x{#1}% \expandafter\endgroup \ifx\x\@empty \else \@for\CurrentOption:=#1\do{% \ifx\CurrentOption\@empty \else \expandafter\KVO@setcurrents\CurrentOption=\@nil \@nameuse{KVO@default@\@currname.\@currext}% \fi }% \fi } \def\KVO@setcurrents#1=#2\@nil{% \def\CurrentOptionValue{#2}% \ifx\CurrentOptionValue\@empty \let\CurrentOptionKey\CurrentOption \let\CurrentOptionValue\relax \else \edef\CurrentOptionKey{\zap@space#1 \@empty}% \expandafter\KVO@setcurrentvalue\CurrentOption\@nil \fi } \def\KVO@setcurrentvalue#1=#2\@nil{% \KV@@sp@def\CurrentOptionValue{#2}% } \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname documentclass\endcsname\relax \def\ProcessKeyvalOptions{% \@ifstar{}\@gobble }% \fi \KVO@AtEnd \endinput %% %% End of file `kvoptions.sty'.