summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/kvoptions
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/kvoptions')
-rw-r--r--Master/texmf-dist/tex/latex/kvoptions/kvoptions-patch.sty544
-rw-r--r--Master/texmf-dist/tex/latex/kvoptions/kvoptions.sty836
2 files changed, 1380 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/kvoptions/kvoptions-patch.sty b/Master/texmf-dist/tex/latex/kvoptions/kvoptions-patch.sty
new file mode 100644
index 00000000000..28c106b8487
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/kvoptions/kvoptions-patch.sty
@@ -0,0 +1,544 @@
+%%
+%% This is file `kvoptions-patch.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% kvoptions.dtx (with options: `patch')
+%%
+%% This is a generated file.
+%%
+%% Project: kvoptions
+%% Version: 2019/11/29 v3.13
+%%
+%% Copyright (C)
+%% 2004, 2006, 2007, 2009-2011 Heiko Oberdiek
+%% 2016-2019 Oberdiek Package Support Group
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%% https://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%% https://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".
+%%
+%% The Current Maintainers of this work are
+%% Heiko Oberdiek and the Oberdiek Package Support Group
+%% https://github.com/ho-tex/kvoptions/issues
+%%
+%%
+%% 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,
+%% kvoptions-test3.tex, kvoptions-test4.tex,
+%% kvoptions-test4.sty.
+%%
+%% No we don't need the option 'color'.
+%% With color support option 'emphcolor' will dynamically
+%% change the color of \emph statements.
+\def\KVO@IfDefThen#1#2{%
+ \ifx#1\ltx@undefined
+ \else
+ \ifx#1\relax
+ \else
+ #2%
+ \fi
+ \fi
+}%
+\def\KVO@GetClassOptionsList{%
+ \let\KVO@classoptionslist\@classoptionslist
+ \KVO@IfDefThen\@classoptionslist{%
+ \KVO@IfDefThen\XKV@documentclass{%
+ \ifx\XKV@documentclass\ltx@empty
+ \else
+ \KVO@IfDefThen\XKV@classoptionslist{%
+ \ifx\XKV@classoptionslist\ltx@empty
+ \else
+ \let\KVO@classoptionslist\XKV@classoptionslist
+ \fi
+ }%
+ \fi
+ }%
+ }%
+}%
+\NeedsTeXFormat{LaTeX2e}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \def\x{\endgroup
+ \expandafter\edef\csname KVO@AtEnd\endcsname{%
+ \endlinechar=\the\endlinechar\relax
+ \catcode13=\the\catcode13\relax
+ \catcode32=\the\catcode32\relax
+ \catcode35=\the\catcode35\relax
+ \catcode61=\the\catcode61\relax
+ \catcode64=\the\catcode64\relax
+ \catcode123=\the\catcode123\relax
+ \catcode125=\the\catcode125\relax
+ }%
+ }%
+\x\catcode61\catcode48\catcode32=10\relax%
+\catcode13=5 % ^^M
+\endlinechar=13 %
+\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{39}{12}% '
+\TMP@EnsureCode{40}{12}% (
+\TMP@EnsureCode{41}{12}% )
+\TMP@EnsureCode{43}{12}% +
+\TMP@EnsureCode{44}{12}% ,
+\TMP@EnsureCode{45}{12}% -
+\TMP@EnsureCode{46}{12}% .
+\TMP@EnsureCode{47}{12}% /
+\TMP@EnsureCode{58}{12}% :
+\TMP@EnsureCode{60}{12}% <
+\TMP@EnsureCode{62}{12}% >
+\TMP@EnsureCode{91}{12}% [
+\TMP@EnsureCode{93}{12}% ]
+\TMP@EnsureCode{96}{12}% `
+\TMP@EnsureCode{124}{12}% |
+\edef\KVO@AtEnd{\KVO@AtEnd\noexpand\endinput}
+\ProvidesPackage{kvoptions-patch}%
+ [2019/11/29 v3.13 LaTeX patch for keyval options (HO)]%
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname eTeXversion\endcsname\relax
+ \PackageWarningNoLine{kvoptions-patch}{%
+ Package loading is aborted, because e-TeX is missing%
+ }%
+ \expandafter\KVO@AtEnd
+\fi%
+\RequirePackage{etexcmds}[2007/09/09]
+\ifetex@unexpanded
+\else
+ \PackageError{kvoptions-patch}{%
+ Could not find eTeX's \string\unexpanded.\MessageBreak
+ Try adding \string\RequirePackage\string{etexcmds\string} %
+ before \string\documentclass%
+ }\@ehd
+ \expandafter\KVO@AtEnd
+\fi%
+\@ifpackageloaded{xkvltxp}{%
+ \PackageWarningNoLine{kvoptions}{%
+ Option `patch' cannot be used together with\MessageBreak
+ package `xkvltxp' that is already loaded.\MessageBreak
+ Therefore package loading is aborted%
+ }%
+ \KVO@AtEnd
+}{}%
+\def\@if@ptions#1#2#3{%
+ \begingroup
+ \KVO@normalize\KVO@temp{#3}%
+ \edef\x{\endgroup
+ \noexpand\@if@pti@ns{%
+ \detokenize\expandafter\expandafter\expandafter{%
+ \csname opt@#2.#1\endcsname
+ }%
+ }{%
+ \detokenize\expandafter{\KVO@temp}%
+ }%
+ }%
+ \x
+}
+\def\@pass@ptions#1#2#3{%
+ \KVO@normalize\KVO@temp{#2}%
+ \@ifundefined{opt@#3.#1}{%
+ \expandafter\gdef\csname opt@#3.#1%
+ \expandafter\endcsname\expandafter{%
+ \KVO@temp
+ }%
+ }{%
+ \expandafter\gdef\csname opt@#3.#1%
+ \expandafter\expandafter\expandafter\endcsname
+ \expandafter\expandafter\expandafter{%
+ \csname opt@#3.#1\expandafter\endcsname\expandafter,\KVO@temp
+ }%
+ }%
+}
+\def\ProcessOptions{%
+ \let\ds@\@empty
+ \@ifundefined{opt@\@currname.\@currext}{%
+ \let\@curroptions\@empty
+ }{%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\@curroptions
+ \expandafter\expandafter\expandafter{%
+ \csname opt@\@currname.\@currext\endcsname
+ }%
+ }%
+ \@ifstar\KVO@xprocess@ptions\KVO@process@ptions
+}
+\def\KVO@process@ptions{%
+ \@for\CurrentOption:=\@declaredoptions\do{%
+ \ifx\CurrentOption\@empty
+ \else
+ \begingroup
+ \ifx\@currext\@clsextension
+ \toks@{}%
+ \else
+ \KVO@GetClassOptionsList
+ \toks@\expandafter{\KVO@classoptionslist,}%
+ \fi
+ \toks\tw@\expandafter{\@curroptions}%
+ \edef\x{\endgroup
+ \noexpand\in@{,\CurrentOption,}{,\the\toks@\the\toks\tw@,}%
+ }%
+ \x
+ \ifin@
+ \KVO@use@ption
+ \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
+ \fi
+ \fi
+ }%
+ \KVO@process@pti@ns
+}
+\def\KVO@xprocess@ptions{%
+ \ifx\@currext\@clsextension
+ \else
+ \KVO@GetClassOptionsList
+ \@for\CurrentOption:=\KVO@classoptionslist\do{%
+ \ifx\CurrentOption\@empty
+ \else
+ \KVO@in@\CurrentOption\@declaredoptions
+ \ifin@
+ \KVO@use@ption
+ \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
+ \fi
+ \fi
+ }%
+ \fi
+ \KVO@process@pti@ns
+}
+\def\KVO@in@#1#2{%
+ \in@false
+ \begingroup
+ \@for\x:=#2\do{%
+ \ifx\x#1\relax
+ \in@true
+ \fi
+ }%
+ \edef\x{\endgroup
+ \ifin@
+ \noexpand\in@true
+ \fi
+ }%
+ \x
+}
+\def\KVO@process@pti@ns{%
+ \@for\CurrentOption:=\@curroptions\do{%
+ \@ifundefined{ds@\KVO@SanitizedCurrentOption}{%
+ \KVO@use@ption
+ \default@ds
+ }%
+ \KVO@use@ption
+ }%
+ \@for\CurrentOption:=\@declaredoptions\do{%
+ \expandafter\let\csname ds@\CurrentOption\endcsname\relax
+ }%
+ \let\CurrentOption\@empty
+ \let\@fileswith@pti@ns\@@fileswith@pti@ns
+ \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+}
+\def\KVO@use@ption{%
+ \begingroup
+ \edef\x{\endgroup
+ \noexpand\@removeelement{%
+ \detokenize\expandafter{\CurrentOption}%
+ }{%
+ \detokenize\expandafter{\@unusedoptionlist}%
+ }%
+ }%
+ \x\@unusedoptionlist
+ \csname ds@\KVO@SanitizedCurrentOption\endcsname
+}
+\def\OptionNotUsed{%
+ \ifx\@currext\@clsextension
+ \xdef\@unusedoptionlist{%
+ \ifx\@unusedoptionlist\@empty
+ \else
+ \detokenize\expandafter{\@unusedoptionlist,}%
+ \fi
+ \detokenize\expandafter{\CurrentOption}%
+ }%
+ \fi
+}
+\def\CurrentOption@SaveLevel{0}
+\def\ExecuteOptions{%
+ \expandafter\KVO@ExecuteOptions
+ \csname CurrentOption@\CurrentOption@SaveLevel\endcsname
+}
+\def\KVO@ExecuteOptions#1#2{%
+ \let#1\CurrentOption
+ \edef\CurrentOption@SaveLevel{%
+ \the\numexpr\CurrentOption@SaveLevel+1%
+ }%
+ \@for\CurrentOption:=#2\do{%
+ \csname ds@\CurrentOption\endcsname
+ }%
+ \edef\CurrentOption@SaveLevel{%
+ \the\numexpr\CurrentOption@SaveLevel-1%
+ }%
+ \let\CurrentOption#1%
+}
+\def\KVO@fileswith@pti@ns#1[#2]#3[#4]{%
+ \ifx#1\@clsextension
+ \ifx\@classoptionslist\relax
+ \KVO@normalize\KVO@temp{#2}%
+ \expandafter\gdef\expandafter\@classoptionslist\expandafter{%
+ \KVO@temp
+ }%
+ \def\reserved@a{%
+ \KVO@onefilewithoptions{#3}[{#2}][{#4}]#1%
+ \@documentclasshook
+ }%
+ \else
+ \def\reserved@a{%
+ \KVO@onefilewithoptions{#3}[{#2}][{#4}]#1%
+ }%
+ \fi
+ \else
+ \begingroup
+ \let\KVO@temp\relax
+ \let\KVO@onefilewithoptions\relax
+ \let\@pkgextension\relax
+ \def\reserved@b##1,{%
+ \ifx\@nil##1\relax
+ \else
+ \ifx\relax##1\relax
+ \else
+ \KVO@onefilewithoptions{##1}[{\KVO@temp}][{#4}]%
+ \@pkgextension
+ \fi
+ \expandafter\reserved@b
+ \fi
+ }%
+ \edef\reserved@a{\zap@space#3 \@empty}%
+ \edef\reserved@a{\expandafter\reserved@b\reserved@a,\@nil,}%
+ \toks@{#2}%
+ \def\KVO@temp{\the\toks@}%
+ \edef\reserved@a{\endgroup \reserved@a}%
+ \fi
+ \reserved@a
+}
+\def\KVO@onefilewithoptions#1[#2][#3]#4{%
+ \@pushfilename
+ \xdef\@currname{#1}%
+ \global\let\@currext#4%
+ \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
+ \let\CurrentOption\@empty
+ \@reset@ptions
+ \makeatletter
+ \def\reserved@a{%
+ \@ifl@aded\@currext{#1}{%
+ \@if@ptions\@currext{#1}{#2}{%
+ }{%
+ \begingroup
+ \@ifundefined{opt@#1.\@currext}{%
+ \def\x{}%
+ }{%
+ \edef\x{%
+ \expandafter\expandafter\expandafter\strip@prefix
+ \expandafter\meaning\csname opt@#1.\@currext\endcsname
+ }%
+ }%
+ \def\y{#2}%
+ \edef\y{\expandafter\strip@prefix\meaning\y}%
+ \@latex@error{Option clash for \@cls@pkg\space #1}{%
+ The package #1 has already been loaded %
+ with options:\MessageBreak
+ \space\space[\x]\MessageBreak
+ There has now been an attempt to load it %
+ with options\MessageBreak
+ \space\space[\y]\MessageBreak
+ Adding the global options:\MessageBreak
+ \space\space
+ \x,\y\MessageBreak
+ to your \noexpand\documentclass declaration may fix this.%
+ \MessageBreak
+ Try typing \space <return> \space to proceed.%
+ }%
+ \endgroup
+ }%
+ }{%
+ \@pass@ptions\@currext{#2}{#1}%
+ \global\expandafter
+ \let\csname ver@\@currname.\@currext\endcsname\@empty
+ \InputIfFileExists
+ {\@currname.\@currext}%
+ {}%
+ {\@missingfileerror\@currname\@currext}%
+ \let\@unprocessedoptions\@@unprocessedoptions
+ \csname\@currname.\@currext-h@@k\endcsname
+ \expandafter\let\csname\@currname.\@currext-h@@k\endcsname
+ \@undefined
+ \@unprocessedoptions
+ }%
+ \@ifl@ter\@currext{#1}{#3}{%
+ }{%
+ \@latex@warning@no@line{%
+ You have requested,\on@line, %
+ version\MessageBreak
+ #3' of \@cls@pkg\space #1,\MessageBreak
+ but only version\MessageBreak
+ `\csname ver@#1.\@currext\endcsname'\MessageBreak
+ is available%
+ }%
+ }%
+ \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi
+ \@popfilename
+ \@reset@ptions
+ }%
+ \reserved@a
+}
+\def\@unknownoptionerror{%
+ \@latex@error{%
+ Unknown option `\KVO@SanitizedCurrentOption' %
+ for \@cls@pkg\space`\@currname'%
+ }{%
+ The option `\KVO@SanitizedCurrentOption' was not declared in %
+ \@cls@pkg\space`\@currname', perhaps you\MessageBreak
+ misspelled its name. %
+ Try typing \space <return> %
+ \space to proceed.%
+ }%
+}
+\def\@@unprocessedoptions{%
+ \ifx\@currext\@pkgextension
+ \@ifundefined{opt@\@currname.\@currext}{%
+ \let\@curroptions\@empty
+ }{%
+ \expandafter\let\expandafter\@curroptions
+ \csname opt@\@currname.\@currext\endcsname
+ }%
+ \@for\CurrentOption:=\@curroptions\do{%
+ \ifx\CurrentOption\@empty\else\@unknownoptionerror\fi
+ }%
+ \fi
+}
+\def\KVO@SanitizedCurrentOption{%
+ \expandafter\strip@prefix\meaning\CurrentOption
+}
+\def\KVO@normalize#1#2{%
+ \let\KVO@result\@empty
+ \KVO@splitcomma#2,\@nil
+ \let#1\KVO@result
+}
+\def\KVO@splitcomma#1,#2\@nil{%
+ \KVO@ifempty{#1}{}{%
+ \KVO@checkkv#1=\@nil
+ }%
+ \KVO@ifempty{#2}{}{\KVO@splitcomma#2\@nil}%
+}
+\def\KVO@ifempty#1{%
+ \expandafter\ifx\expandafter\\\detokenize{#1}\\%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+\def\KVO@checkkv#1=#2\@nil{%
+ \KVO@ifempty{#2}{%
+ % option without value
+ \edef\KVO@x{\zap@space#1 \@empty}%
+ \ifx\KVO@x\@empty
+ % ignore empty option
+ \else
+ % append to list
+ \edef\KVO@result{%
+ \etex@unexpanded\expandafter{\KVO@result},\KVO@x
+ }%
+ \fi
+ }{%
+ % #1: "key", #2: "value="
+ % add key part
+ \edef\KVO@result{%
+ \etex@unexpanded\expandafter{\KVO@result},%
+ \zap@space#1 \@empty
+ }%
+ \futurelet\@let@token\KVO@checkfirsttok#2 \@nil| = \@nil|\KVO@nil
+ }%
+}
+\def\KVO@checkfirsttok{%
+ \ifx\@let@token\bgroup
+ % no space at start
+ \expandafter\KVO@removelastspace\expandafter=%
+ % "<value><spaceopt>= \@nil"
+ \else
+ \expandafter\KVO@checkfirstA
+ \fi
+}
+\def\KVO@checkfirstA#1 #2\@nil{%
+ \KVO@ifempty{#2}{%
+ \KVO@removelastspace=#1 \@nil
+ }{%
+ \KVO@ifempty{#1}{%
+ \KVO@removelastspace=#2\@nil
+ }{%
+ \KVO@removelastspace=#1 #2\@nil
+ }%
+ }%
+}
+\def\KVO@removelastspace#1 = \@nil|#2\KVO@nil{%
+ \KVO@ifempty{#2}{%
+ \edef\KVO@result{%
+ \etex@unexpanded\expandafter{\KVO@result}%
+ \etex@unexpanded\expandafter{\KVO@removegarbage#1\KVO@nil}%
+ }%
+ }{%
+ \edef\KVO@result{%
+ \etex@unexpanded\expandafter{\KVO@result}%
+ \etex@unexpanded{#1}%
+ }%
+ }%
+}
+\def\KVO@removegarbage#1= \@nil#2\KVO@nil{#1}%
+\def\KVO@removeelement#1#2{%
+ \begingroup
+ \toks@={}%
+ \@for\x:=#2\do{%
+ \ifx\x\@empty
+ \else
+ \ifx\x#1\relax
+ \else
+ \edef\t{\the\toks@}%
+ \ifx\t\@empty
+ \else
+ \toks@\expandafter{\the\toks@,}%
+ \fi
+ \toks@\expandafter{\the\expandafter\toks@\x}%
+ \fi
+ \fi
+ }%
+ \edef\x{\endgroup
+ \def\noexpand#2{\the\toks@}%
+ }%
+ \x
+}
+\let\@@fileswith@pti@ns\KVO@fileswith@pti@ns
+\ifx\@fileswith@pti@ns\@badrequireerror
+\else
+ \let\@fileswith@pti@ns\KVO@fileswith@pti@ns
+\fi
+\let\KVO@Patch=Y
+\KVO@AtEnd%
+\endinput
+%%
+%% End of file `kvoptions-patch.sty'.
diff --git a/Master/texmf-dist/tex/latex/kvoptions/kvoptions.sty b/Master/texmf-dist/tex/latex/kvoptions/kvoptions.sty
new file mode 100644
index 00000000000..6451bb0e7b3
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/kvoptions/kvoptions.sty
@@ -0,0 +1,836 @@
+%%
+%% 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.
+%%
+%% Project: kvoptions
+%% Version: 2019/11/29 v3.13
+%%
+%% Copyright (C)
+%% 2004, 2006, 2007, 2009-2011 Heiko Oberdiek
+%% 2016-2019 Oberdiek Package Support Group
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%% https://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%% https://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".
+%%
+%% The Current Maintainers of this work are
+%% Heiko Oberdiek and the Oberdiek Package Support Group
+%% https://github.com/ho-tex/kvoptions/issues
+%%
+%%
+%% 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,
+%% kvoptions-test3.tex, kvoptions-test4.tex,
+%% kvoptions-test4.sty.
+%%
+%% No we don't need the option 'color'.
+%% With color support option 'emphcolor' will dynamically
+%% change the color of \emph statements.
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode35=6 % #
+ \catcode39=12 % '
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \catcode64=11 % @
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \expandafter\let\expandafter\x\csname ver@kvoptions.sty\endcsname
+ \ifx\x\relax % plain-TeX, first loading
+ \else
+ \def\empty{}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \else
+ \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}%
+ \aftergroup\endinput
+ \fi
+ \fi
+\endgroup%
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode35=6 % #
+ \catcode39=12 % '
+ \catcode40=12 % (
+ \catcode41=12 % )
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode47=12 % /
+ \catcode58=12 % :
+ \catcode64=11 % @
+ \catcode91=12 % [
+ \catcode93=12 % ]
+ \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}%
+ [2019/11/29 v3.13 Key value format for package options (HO)]%
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \def\x{\endgroup
+ \expandafter\edef\csname KVO@AtEnd\endcsname{%
+ \endlinechar=\the\endlinechar\relax
+ \catcode13=\the\catcode13\relax
+ \catcode32=\the\catcode32\relax
+ \catcode35=\the\catcode35\relax
+ \catcode61=\the\catcode61\relax
+ \catcode64=\the\catcode64\relax
+ \catcode123=\the\catcode123\relax
+ \catcode125=\the\catcode125\relax
+ }%
+ }%
+\x\catcode61\catcode48\catcode32=10\relax%
+\catcode13=5 % ^^M
+\endlinechar=13 %
+\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{62}{12}% >
+\TMP@EnsureCode{91}{12}% [
+\TMP@EnsureCode{93}{12}% ]
+\TMP@EnsureCode{94}{7}% ^ (superscript)
+\TMP@EnsureCode{96}{12}% `
+\edef\KVO@AtEnd{\KVO@AtEnd\noexpand\endinput}
+\@ifundefined{define@key}{%
+ \RequirePackage{keyval}\relax
+}{}
+\RequirePackage{ltxcmds}[2010/12/02]
+\RequirePackage{kvsetkeys}[2007/09/29]
+\@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}[2019/11/29]%
+ }%
+}
+\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{%
+ \ltx@ifundefined{KVO@prefix@\@currname.\@currext}{%
+ \@currname @%
+ }{%
+ \csname KVO@prefix@\@currname.\@currext\endcsname
+ }%
+}
+\define@key{KVO}{setkeys}{%
+ \expandafter\def\csname KVO@setkeys@%
+ \@currname.\@currext\endcsname{#1}%
+}
+\def\KVO@setkeys{%
+ \ltx@IfUndefined{KVO@setkeys@\@currname.\@currext}{%
+ \setkeys
+ }{%
+ \csname KVO@setkeys@\@currname.\@currext\endcsname
+ }%
+}
+\newcommand*{\SetupKeyvalOptions}{%
+ \kvsetkeys{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}%
+ \ltx@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}
+\ltx@onelevel@sanitize\KVO@true
+\ltx@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}[2]{%
+ \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
+ \begingroup
+ \toks@{#2}%
+ \expandafter\endgroup
+ \expandafter\def
+ \csname\KVO@prefix#1\expandafter\endcsname
+ \expandafter{\the\toks@}%
+ }%
+}
+\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}%
+}
+\newcommand*{\DeclareLocalOptions}[1]{%
+ \comma@parse{#1}\KVO@DeclareLocalOption
+}
+\def\KVO@DeclareLocalOption#1{%
+ \expandafter\def\csname KVO@local@\KVO@family @#1\endcsname{}%
+}
+\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
+ \kvsetkeys{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*{\AddToKeyvalOption}{%
+ \@ifstar{%
+ \begingroup
+ \edef\x{\endgroup
+ \noexpand\KVO@AddToKeyvalOption{\KVO@family}%
+ }%
+ \x
+ }%
+ \KVO@AddToKeyvalOption
+}
+\def\KVO@AddToKeyvalOption#1#2{%
+ \@ifundefined{KV@#1@#2}{%
+ \PackageWarning{kvoptions}{%
+ Key `#2' of family `#1' does not exist.\MessageBreak
+ Ignoring \string\AddToKeyvalOption
+ }%
+ \@gobble
+ }{%
+ \edef\KVO@next{%
+ \noexpand\KVO@@AddToKeyvalOption
+ \expandafter\noexpand\csname KV@#1@#2\endcsname
+ }%
+ \afterassignment\KVO@next
+ \def\KVO@temp##1%
+ }%
+}
+\def\KVO@@AddToKeyvalOption#1{%
+ \begingroup
+ \toks@\expandafter{#1{##1}}%
+ \toks@\expandafter{\the\expandafter\toks@\KVO@temp{##1}}%
+ \edef\x{\endgroup
+ \noexpand\def\noexpand#1####1{\the\toks@}%
+ }%
+ \x
+}
+\def\KVO@IfDefThen#1#2{%
+ \ifx#1\ltx@undefined
+ \else
+ \ifx#1\relax
+ \else
+ #2%
+ \fi
+ \fi
+}%
+\def\KVO@GetClassOptionsList{%
+ \let\KVO@classoptionslist\@classoptionslist
+ \KVO@IfDefThen\@classoptionslist{%
+ \KVO@IfDefThen\XKV@documentclass{%
+ \ifx\XKV@documentclass\ltx@empty
+ \else
+ \KVO@IfDefThen\XKV@classoptionslist{%
+ \ifx\XKV@classoptionslist\ltx@empty
+ \else
+ \let\KVO@classoptionslist\XKV@classoptionslist
+ \fi
+ }%
+ \fi
+ }%
+ }%
+}%
+\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
+ \KVO@GetClassOptionsList
+ \ifx\KVO@classoptionslist\relax
+ \else
+ \@for\KVO@CurrentOption:=\KVO@classoptionslist\do{%
+ \@ifundefined{KV@#1@\expandafter\KVO@getkey
+ \KVO@CurrentOption=\@nil}{%
+ }{%
+ \@ifundefined{KVO@local@#1@\expandafter\KVO@getkey
+ \KVO@CurrentOption=\@nil}{%
+ \ifx\KVO@Patch Y%
+ \edef\KVO@temp{%
+ \etex@unexpanded\expandafter{%
+ \KVO@temp
+ }%
+ ,%
+ \etex@unexpanded\expandafter{%
+ \KVO@CurrentOption
+ }%
+ ,%
+ }%
+ \ltx@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
+ }{%
+ \@ifundefined{KVO@default@\@currname.\@currext}{%
+ \ifx\KVO@Patch Y%
+ \ltx@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\tw@\expandafter{%
+ \the\toks\expandafter\tw@\expandafter,\CurrentOption
+ }%
+ }%
+ }{%
+ \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\KVO@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\space 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
+ }%
+ }%
+ }%
+ }%
+ }%
+ \edef\KVO@temp{\endgroup
+ \noexpand\KVO@calldefault{\the\toks\tw@}%
+ \noexpand\KVO@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'.