summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/xkeyval
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-04-13 00:22:43 +0000
committerKarl Berry <karl@freefriends.org>2007-04-13 00:22:43 +0000
commit4cdf0fc4a6eb6600fbae1ed88ad729a99a2c9c6a (patch)
treec0bb4ea4725e75c5140df84a47609d19ecf9eddf /Master/texmf-dist/tex/generic/xkeyval
parent9f9c13f3e8d249b1d4c7b782cee4eee8ef847a9a (diff)
special case for xkeyval, needs both tex and generic files isntalled (reported by Mojca, 30 Mar 2007 14:55:13)
git-svn-id: svn://tug.org/texlive/trunk@4159 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/xkeyval')
-rw-r--r--Master/texmf-dist/tex/generic/xkeyval/keyval.tex82
-rw-r--r--Master/texmf-dist/tex/generic/xkeyval/pst-xkey.tex70
-rw-r--r--Master/texmf-dist/tex/generic/xkeyval/xkeyval.tex844
-rw-r--r--Master/texmf-dist/tex/generic/xkeyval/xkvtxhdr.tex91
4 files changed, 1087 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/xkeyval/keyval.tex b/Master/texmf-dist/tex/generic/xkeyval/keyval.tex
new file mode 100644
index 00000000000..38a505abeee
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/xkeyval/keyval.tex
@@ -0,0 +1,82 @@
+%%
+%% This is file `keyval.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xkeyval.dtx (with options: `xkvkeyval')
+%%
+%% ---------------------------------------
+%% Copyright (C) 2004-2006 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file xkeyval.dtx and derived files
+%% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls,
+%% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex,
+%% xkvex3.tex and xkvex4.tex.
+%%
+%% The following files constitute the xkeyval bundle and must be
+%% distributed as a whole: readme, xkeyval.pdf, keyval.tex,
+%% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx.
+%%
+%%
+%% Based on keyval.sty.
+%%
+\def\XKV@tempa#1{%
+\def\KV@@sp@def##1##2{%
+ \futurelet\XKV@resa\KV@@sp@d##2\@nil\@nil#1\@nil\relax##1}%
+\def\KV@@sp@d{%
+ \ifx\XKV@resa\@sptoken
+ \expandafter\KV@@sp@b
+ \else
+ \expandafter\KV@@sp@b\expandafter#1%
+ \fi}%
+\def\KV@@sp@b#1##1 \@nil{\KV@@sp@c##1}%
+ }
+\XKV@tempa{ }
+\def\KV@@sp@c#1\@nil#2\relax#3{\XKV@toks{#1}\edef#3{\the\XKV@toks}}
+\def\KV@do#1,{%
+ \ifx\relax#1\@empty\else
+ \KV@split#1==\relax
+ \expandafter\KV@do\fi}
+\def\KV@split#1=#2=#3\relax{%
+ \KV@@sp@def\XKV@tempa{#1}%
+ \ifx\XKV@tempa\@empty\else
+ \expandafter\let\expandafter\XKV@tempc
+ \csname\KV@prefix\XKV@tempa\endcsname
+ \ifx\XKV@tempc\relax
+ \XKV@err{`\XKV@tempa' undefined}%
+ \else
+ \ifx\@empty#3\@empty
+ \KV@default
+ \else
+ \KV@@sp@def\XKV@tempb{#2}%
+ \expandafter\XKV@tempc\expandafter{\XKV@tempb}\relax
+ \fi
+ \fi
+ \fi}
+\def\KV@default{%
+ \expandafter\let\expandafter\XKV@tempb
+ \csname\KV@prefix\XKV@tempa @default\endcsname
+ \ifx\XKV@tempb\relax
+ \XKV@err{No value specified for key `\XKV@tempa'}%
+ \else
+ \XKV@tempb\relax
+ \fi}
+\endinput
+%%
+%% End of file `keyval.tex'.
diff --git a/Master/texmf-dist/tex/generic/xkeyval/pst-xkey.tex b/Master/texmf-dist/tex/generic/xkeyval/pst-xkey.tex
new file mode 100644
index 00000000000..e2067f99909
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/xkeyval/pst-xkey.tex
@@ -0,0 +1,70 @@
+%%
+%% This is file `pst-xkey.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xkeyval.dtx (with options: `pxktex')
+%%
+%% ---------------------------------------
+%% Copyright (C) 2004-2006 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file xkeyval.dtx and derived files
+%% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls,
+%% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex,
+%% xkvex3.tex and xkvex4.tex.
+%%
+%% The following files constitute the xkeyval bundle and must be
+%% distributed as a whole: readme, xkeyval.pdf, keyval.tex,
+%% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx.
+%%
+\csname PSTXKeyLoaded\endcsname
+\let\PSTXKeyLoaded\endinput
+\edef\PSTXKeyCatcodes{%
+ \catcode`\noexpand\@\the\catcode`\@\relax
+ \let\noexpand\PSTXKeyCatcodes\relax
+}
+\catcode`\@=11\relax
+\ifx\ProvidesFile\@undefined
+ \message{2005/11/25 v1.6 PSTricks specialization of xkeyval (HA)}
+ \ifx\XKeyValLoaded\endinput\else\input xkeyval \fi
+\else
+ \ProvidesFile{pst-xkey.tex}
+ [2005/11/25 v1.6 PSTricks specialization of xkeyval (HA)]
+ \@addtofilelist{pst-xkey.tex}
+ \RequirePackage{xkeyval}
+\fi
+\def\pst@famlist{}
+\def\pst@addfams#1{%
+ \XKV@for@n{#1}\XKV@tempa{%
+ \@expandtwoargs\in@{,\XKV@tempa,}{,\pst@famlist,}%
+ \ifin@\else\edef\pst@famlist{\pst@famlist,\XKV@tempa}\fi
+ }%
+}
+\def\psset{%
+ \expandafter\@testopt\expandafter\pss@t\expandafter{\pst@famlist}%
+}
+\def\pss@t[#1]#2{\setkeys+[psset]{#1}{#2}\ignorespaces}
+\def\@psset#1,\@nil{%
+ \edef\XKV@tempa{\noexpand\setkeys+[psset]{\pst@famlist}}%
+ \XKV@tempa{#1}%
+}
+\PSTXKeyCatcodes
+\endinput
+%%
+%% End of file `pst-xkey.tex'.
diff --git a/Master/texmf-dist/tex/generic/xkeyval/xkeyval.tex b/Master/texmf-dist/tex/generic/xkeyval/xkeyval.tex
new file mode 100644
index 00000000000..ed42476ca6f
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/xkeyval/xkeyval.tex
@@ -0,0 +1,844 @@
+%%
+%% This is file `xkeyval.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xkeyval.dtx (with options: `xkvtex')
+%%
+%% ---------------------------------------
+%% Copyright (C) 2004-2006 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file xkeyval.dtx and derived files
+%% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls,
+%% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex,
+%% xkvex3.tex and xkvex4.tex.
+%%
+%% The following files constitute the xkeyval bundle and must be
+%% distributed as a whole: readme, xkeyval.pdf, keyval.tex,
+%% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx.
+%%
+\csname XKeyValLoaded\endcsname
+\let\XKeyValLoaded\endinput
+\edef\XKVcatcodes{%
+ \catcode`\noexpand\@\the\catcode`\@\relax
+ \catcode`\noexpand\=\the\catcode`\=\relax
+ \catcode`\noexpand\,\the\catcode`\,\relax
+ \catcode`\noexpand\:\the\catcode`\:\relax
+ \let\noexpand\XKVcatcodes\relax
+}
+\catcode`\@11\relax
+\catcode`\=12\relax
+\catcode`\,12\relax
+\catcode`\:12\relax
+\newtoks\XKV@toks
+\newcount\XKV@depth
+\newif\ifXKV@st
+\newif\ifXKV@sg
+\newif\ifXKV@pl
+\newif\ifXKV@knf
+\newif\ifXKV@rkv
+\newif\ifXKV@inpox
+\newif\ifXKV@preset
+\let\XKV@rm\@empty
+\ifx\ProvidesFile\@undefined
+ \message{2006/11/18 v2.5f key=value parser (HA)}
+ \input xkvtxhdr
+\else
+ \ProvidesFile{xkeyval.tex}[2006/11/18 v2.5f key=value parser (HA)]
+ \@addtofilelist{xkeyval.tex}
+\fi
+\long\def\@firstoftwo#1#2{#1}
+\long\def\@secondoftwo#1#2{#2}
+\long\def\XKV@afterfi#1\fi{\fi#1}
+\long\def\XKV@afterelsefi#1\else#2\fi{\fi#1}
+\ifx\ifcsname\@undefined\XKV@afterelsefi
+ \def\XKV@ifundefined#1{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname#1\endcsname\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ }
+\else
+ \def\XKV@ifundefined#1{%
+ \ifcsname#1\endcsname
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ }
+\fi
+\XKV@ifundefined{ver@keyval.sty}{
+ \input keyval
+ \expandafter\def\csname ver@keyval.sty\endcsname{1999/03/16}
+}{}
+\long\def\@ifnextcharacter#1#2#3{%
+ \@ifnextchar\bgroup
+ {\@ifnextchar{#1}{#2}{#3}}%
+ {\@ifncharacter{#1}{#2}{#3}}%
+}
+\long\def\@ifncharacter#1#2#3#4{%
+ \if\string#1\string#4%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {#2}{#3}#4%
+}
+\long\def\XKV@for@n#1#2#3{%
+ \def#2{#1}%
+ \ifx#2\@empty
+ \XKV@for@break
+ \else
+ \expandafter\XKV@f@r
+ \fi
+ #2{#3}#1,\@nil,%
+}
+\long\def\XKV@f@r#1#2#3,{%
+ \def#1{#3}%
+ \ifx#1\@nnil
+ \expandafter\@gobbletwo
+ \else
+ #2\expandafter\XKV@f@r
+ \fi
+ #1{#2}%
+}
+\long\def\XKV@for@break #1\@nil,{\fi}
+\long\def\XKV@for@o#1{\expandafter\XKV@for@n\expandafter{#1}}
+\long\def\XKV@for@en#1#2#3{\XKV@f@r#2{#3}#1,\@nil,}
+\long\def\XKV@for@eo#1#2#3{%
+ \def#2{\XKV@f@r#2{#3}}\expandafter#2#1,\@nil,%
+}
+\long\def\XKV@whilist#1#2#3\fi#4{%
+ #3\expandafter\XKV@wh@list#1,\@nil,\@nil\@@#2#3\fi{#4}{}\fi
+}
+\long\def\XKV@wh@list#1,#2\@@#3#4\fi#5#6{%
+ \def#3{#1}%
+ \ifx#3\@nnil
+ \def#3{#6}\expandafter\XKV@wh@l@st
+ \else
+ #4%
+ #5\expandafter\expandafter\expandafter\XKV@wh@list
+ \else
+ \def#3{#6}\expandafter\expandafter\expandafter\XKV@wh@l@st
+ \fi
+ \fi
+ #2\@@#3#4\fi{#5}{#1}%
+}
+\long\def\XKV@wh@l@st#1\@@#2#3\fi#4#5{}
+\def\XKV@addtomacro@n#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+\def\XKV@addtomacro@o#1#2{%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#1\expandafter
+ \expandafter\expandafter{\expandafter#1#2}%
+}
+\def\XKV@addtolist@n#1#2{%
+ \ifx#1\@empty
+ \XKV@addtomacro@n#1{#2}%
+ \else
+ \XKV@addtomacro@n#1{,#2}%
+ \fi
+}
+\def\XKV@addtolist@o#1#2{%
+ \ifx#1\@empty
+ \XKV@addtomacro@o#1#2%
+ \else
+ \XKV@addtomacro@o#1{\expandafter,#2}%
+ \fi
+}
+\def\XKV@addtolist@x#1#2{\edef#1{#1\ifx#1\@empty\else,\fi#2}}
+\def\@selective@sanitize{\@testopt\@s@lective@sanitize\@M}
+\def\@s@lective@sanitize[#1]#2#3{%
+ \begingroup
+ \count@#1\relax\advance\count@\@ne
+ \XKV@toks\expandafter{#3}%
+ \def#3{#2}\@onelevel@sanitize#3%
+ \edef#3{{#3}{\the\XKV@toks}}%
+ \expandafter\@s@l@ctive@sanitize\expandafter#3#3%
+ \expandafter\endgroup\expandafter\def\expandafter#3\expandafter{#3}%
+}
+\def\@s@l@ctive@sanitize#1#2#3{%
+ \def\@i{\futurelet\@@tok\@ii}%
+ \def\@ii{%
+ \expandafter\@iii\meaning\@@tok\relax
+ \ifx\@@tok\@s@l@ctive@sanitize
+ \let\@@cmd\@gobble
+ \else
+ \ifx\@@tok\@sptoken
+ \XKV@toks\expandafter{#1}\edef#1{\the\XKV@toks\space}%
+ \def\@@cmd{\afterassignment\@i\let\@@tok= }%
+ \else
+ \let\@@cmd\@iv
+ \fi
+ \fi
+ \@@cmd
+ }%
+ \def\@iii##1##2\relax{\if##1\@backslashchar\let\@@tok\relax\fi}%
+ \def\@iv##1{%
+ \toks@\expandafter{#1}\XKV@toks{##1}%
+ \ifx\@@tok\bgroup
+ \advance\count@\m@ne
+ \ifnum\count@>\z@
+ \begingroup
+ \def#1{\expandafter\@s@l@ctive@sanitize
+ \csname\string#1\endcsname{#2}}%
+ \expandafter#1\expandafter{\the\XKV@toks}%
+ \XKV@toks\expandafter\expandafter\expandafter
+ {\csname\string#1\endcsname}%
+ \edef#1{\noexpand\XKV@toks{\the\XKV@toks}}%
+ \expandafter\endgroup#1%
+ \fi
+ \edef#1{\the\toks@{\the\XKV@toks}}%
+ \advance\count@\@ne
+ \let\@@cmd\@i
+ \else
+ \edef#1{\expandafter\string\the\XKV@toks}%
+ \expandafter\in@\expandafter{#1}{#2}%
+ \edef#1{\the\toks@\ifin@#1\else
+ \ifx\@@tok\@sptoken\space\else\the\XKV@toks\fi\fi}%
+ \edef\@@cmd{\noexpand\@i\ifx\@@tok\@sptoken\the\XKV@toks\fi}%
+ \fi
+ \@@cmd
+ }%
+ \let#1\@empty\@i#3\@s@l@ctive@sanitize
+}
+\def\XKV@checksanitizea#1#2{%
+ \XKV@ch@cksanitize{#1}#2=%
+ \ifin@\else\XKV@ch@cksanitize{#1}#2,\fi
+ \ifin@\@selective@sanitize[0]{,=}#2\fi
+}
+\def\XKV@checksanitizeb#1#2{%
+ \XKV@ch@cksanitize{#1}#2,%
+ \ifin@\@selective@sanitize[0],#2\fi
+}
+\def\XKV@ch@cksanitize#1#2#3{%
+ \def#2{#1}%
+ \@onelevel@sanitize#2%
+ \@expandtwoargs\in@#3{#2}%
+ \ifin@
+ \def#2##1#3##2\@nil{%
+ \def#2{##2}%
+ \ifx#2\@empty\else\in@false\fi
+ }%
+ #2#1#3\@nil
+ \fi
+ \def#2{#1}%
+}
+\def\XKV@sp@deflist#1#2{%
+ \let#1\@empty
+ \XKV@for@n{#2}\XKV@resa{%
+ \expandafter\KV@@sp@def\expandafter\XKV@resa\expandafter{\XKV@resa}%
+ \XKV@addtomacro@o#1{\expandafter,\XKV@resa}%
+ }%
+ \ifx#1\@empty\else
+ \def\XKV@resa,##1\@nil{\def#1{##1}}%
+ \expandafter\XKV@resa#1\@nil
+ \fi
+}
+\def\XKV@merge#1#2#3{%
+ \XKV@checksanitizea{#2}\XKV@tempa
+ \XKV@for@o\XKV@tempa\XKV@tempa{%
+ \XKV@pltrue
+ #3\XKV@tempa\XKV@tempb
+ \let\XKV@tempc#1%
+ \let#1\@empty
+ \XKV@for@o\XKV@tempc\XKV@tempc{%
+ #3\XKV@tempc\XKV@tempd
+ \ifx\XKV@tempb\XKV@tempd
+ \XKV@plfalse
+ \XKV@addtolist@o#1\XKV@tempa
+ \else
+ \XKV@addtolist@o#1\XKV@tempc
+ \fi
+ }%
+ \ifXKV@pl\XKV@addtolist@o#1\XKV@tempa\fi
+ }%
+ \ifXKV@st\global\let#1#1\fi
+}
+\def\XKV@delete#1#2#3{%
+ \XKV@checksanitizeb{#2}\XKV@tempa
+ \let\XKV@tempb#1%
+ \let#1\@empty
+ \XKV@for@o\XKV@tempb\XKV@tempb{%
+ #3\XKV@tempb\XKV@tempc
+ \@expandtwoargs\in@{,\XKV@tempc,}{,\XKV@tempa,}%
+ \ifin@\else\XKV@addtolist@o#1\XKV@tempb\fi
+ }%
+ \ifXKV@st\global\let#1#1\fi
+}
+\def\XKV@warn#1{\message{xkeyval warning: #1}}
+\def\XKV@err#1{\errmessage{xkeyval error: #1}}
+\def\KV@errx{\XKV@err}
+\let\KV@err\KV@errx
+\def\XKV@ifstar#1{\@ifnextcharacter*{\@firstoftwo{#1}}}
+\def\XKV@ifplus#1{\@ifnextcharacter+{\@firstoftwo{#1}}}
+\def\XKV@makepf#1{%
+ \KV@@sp@def\XKV@prefix{#1}%
+ \def\XKV@resa{XKV}%
+ \ifx\XKV@prefix\XKV@resa
+ \XKV@err{`XKV' prefix is not allowed}%
+ \let\XKV@prefix\@empty
+ \else
+ \edef\XKV@prefix{\ifx\XKV@prefix\@empty\else\XKV@prefix @\fi}%
+ \fi
+}
+\def\XKV@makehd#1{%
+ \expandafter\KV@@sp@def\expandafter\XKV@header\expandafter{#1}%
+ \edef\XKV@header{%
+ \XKV@prefix\ifx\XKV@header\@empty\else\XKV@header @\fi
+ }%
+}
+\def\XKV@srstate#1#2{%
+ \ifx\@empty#2\@empty\advance\XKV@depth\@ne\fi
+ \XKV@for@n{XKV@prefix,XKV@fams,XKV@tkey,XKV@na,%
+ XKV@rm,ifXKV@st,ifXKV@pl,ifXKV@knf}\XKV@resa{%
+ \expandafter\let\csname\XKV@resa#1\expandafter
+ \endcsname\csname\XKV@resa#2\endcsname
+ }%
+ \ifx\@empty#1\@empty\advance\XKV@depth\m@ne\fi
+}
+\def\XKV@testopta#1{%
+ \XKV@ifstar{\XKV@sttrue\XKV@t@stopta{#1}}%
+ {\XKV@stfalse\XKV@t@stopta{#1}}%
+}
+\def\XKV@t@stopta#1{\XKV@ifplus{\XKV@pltrue#1}{\XKV@plfalse#1}}
+\def\XKV@testoptb#1{\@testopt{\XKV@t@stoptb#1}{KV}}
+\def\XKV@t@stoptb#1[#2]#3{%
+ \XKV@makepf{#2}%
+ \XKV@makehd{#3}%
+ \KV@@sp@def\XKV@tfam{#3}%
+ #1%
+}
+\def\XKV@testoptc#1{\@testopt{\XKV@t@stoptc#1}{KV}}
+\def\XKV@t@stoptc#1[#2]#3{%
+ \XKV@makepf{#2}%
+ \XKV@checksanitizeb{#3}\XKV@fams
+ \expandafter\XKV@sp@deflist\expandafter
+ \XKV@fams\expandafter{\XKV@fams}%
+ \@testopt#1{}%
+}
+\def\XKV@testoptd#1#2{%
+ \XKV@testoptb{%
+ \edef\XKV@tempa{#2\XKV@header}%
+ \def\XKV@tempb{\@testopt{\XKV@t@stoptd#1}}%
+ \expandafter\XKV@tempb\expandafter{\XKV@tempa}%
+ }%
+}
+\def\XKV@t@stoptd#1[#2]#3{%
+ \@ifnextchar[{\XKV@sttrue#1{#2}{#3}}{\XKV@stfalse#1{#2}{#3}[]}%
+}
+\def\XKV@ifcmd#1#2#3{%
+ \def\XKV@@ifcmd##1#2##2##3\@nil##4{%
+ \def##4{##2}\ifx##4\@nnil
+ \def##4{##1}\expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ }%
+ \XKV@@ifcmd#1#2{\@nil}\@nil#3%
+}
+\def\XKV@getkeyname#1#2{\expandafter\XKV@g@tkeyname#1=\@nil#2}
+\def\XKV@g@tkeyname#1=#2\@nil#3{%
+ \XKV@ifcmd{#1}\savevalue#3{\XKV@rkvtrue\XKV@sgfalse}{%
+ \XKV@ifcmd{#1}\gsavevalue#3%
+ {\XKV@rkvtrue\XKV@sgtrue}{\XKV@rkvfalse\XKV@sgfalse}%
+ }%
+}
+\def\XKV@getsg#1#2{%
+ \expandafter\XKV@ifcmd\expandafter{#1}\global#2\XKV@sgtrue\XKV@sgfalse
+}
+\def\XKV@define@default#1#2{%
+ \expandafter\def\csname\XKV@header#1@default\expandafter
+ \endcsname\expandafter{\csname\XKV@header#1\endcsname{#2}}%
+}
+\def\define@key{\XKV@testoptb\XKV@define@key}
+\def\XKV@define@key#1{%
+ \@ifnextchar[{\XKV@d@fine@k@y{#1}}{%
+ \expandafter\def\csname\XKV@header#1\endcsname####1%
+ }%
+}
+\def\XKV@d@fine@k@y#1[#2]{%
+ \XKV@define@default{#1}{#2}%
+ \expandafter\def\csname\XKV@header#1\endcsname##1%
+}
+\def\define@cmdkey{\XKV@testoptd\XKV@define@cmdkey{cmd}}
+\def\XKV@define@cmdkey#1#2[#3]#4{%
+ \ifXKV@st\XKV@define@default{#2}{#3}\fi
+ \def\XKV@tempa{\expandafter\def\csname\XKV@header#2\endcsname####1}%
+ \begingroup\expandafter\endgroup\expandafter\XKV@tempa\expandafter
+ {\expandafter\def\csname#1#2\endcsname{##1}#4}%
+}
+\def\define@cmdkeys{\XKV@testoptd\XKV@define@cmdkeys{cmd}}
+\def\XKV@define@cmdkeys#1#2[#3]{%
+ \XKV@sp@deflist\XKV@tempa{#2}%
+ \XKV@for@o\XKV@tempa\XKV@tempa{%
+ \edef\XKV@tempa{\noexpand\XKV@define@cmdkey{#1}{\XKV@tempa}}%
+ \XKV@tempa[#3]{}%
+ }%
+}
+\def\define@choicekey{\XKV@testopta{\XKV@testoptb\XKV@define@choicekey}}
+\def\XKV@define@choicekey#1{\@testopt{\XKV@d@fine@choicekey{#1}}{}}
+\def\XKV@d@fine@choicekey#1[#2]#3{%
+ \toks@{#2}%
+ \XKV@sp@deflist\XKV@tempa{#3}\XKV@toks\expandafter{\XKV@tempa}%
+ \@ifnextchar[{\XKV@d@fine@ch@icekey{#1}}{\XKV@d@fine@ch@ic@key{#1}}%
+}
+\def\XKV@d@fine@ch@icekey#1[#2]{%
+ \XKV@define@default{#1}{#2}%
+ \XKV@d@fine@ch@ic@key{#1}%
+}
+\def\XKV@d@fine@ch@ic@key#1{%
+ \ifXKV@pl\XKV@afterelsefi
+ \expandafter\XKV@d@f@ne@ch@ic@k@y
+ \else\XKV@afterfi
+ \expandafter\XKV@d@f@ne@ch@ic@key
+ \fi
+ \csname\XKV@header#1\endcsname
+}
+\def\XKV@d@f@ne@ch@ic@key#1#2{\XKV@d@f@n@@ch@ic@k@y#1{{#2}}}
+\def\XKV@d@f@ne@ch@ic@k@y#1#2#3{\XKV@d@f@n@@ch@ic@k@y#1{{#2}{#3}}}
+\def\XKV@d@f@n@@ch@ic@k@y#1#2{%
+ \edef#1##1{%
+ \ifXKV@st\noexpand\XKV@sttrue\else\noexpand\XKV@stfalse\fi
+ \ifXKV@pl\noexpand\XKV@pltrue\else\noexpand\XKV@plfalse\fi
+ \noexpand\XKV@checkchoice[\the\toks@]{##1}{\the\XKV@toks}%
+ }%
+ \def\XKV@tempa{\def#1####1}%
+ \expandafter\XKV@tempa\expandafter{#1{##1}#2}%
+}
+\def\define@boolkey{\XKV@t@stopta{\XKV@testoptd\XKV@define@boolkey{}}}
+\def\XKV@define@boolkey#1#2[#3]{%
+ \ifXKV@pl\XKV@afterelsefi
+ \expandafter\XKV@d@f@ne@boolkey
+ \else\XKV@afterfi
+ \expandafter\XKV@d@fine@boolkey
+ \fi
+ \csname\XKV@header#2\endcsname{#2}{#1#2}{#3}%
+}
+\def\XKV@d@fine@boolkey#1#2#3#4#5{%
+ \XKV@d@f@ne@b@olkey#1{#2}{#3}{#4}%
+ {{\csname#3\XKV@resa\endcsname#5}}%
+}
+\def\XKV@d@f@ne@boolkey#1#2#3#4#5#6{%
+ \XKV@d@f@ne@b@olkey#1{#2}{#3}{#4}%
+ {{\csname#3\XKV@resa\endcsname#5}{#6}}%
+}
+\def\XKV@d@f@ne@b@olkey#1#2#3#4#5{%
+ \expandafter\newif\csname if#3\endcsname
+ \ifXKV@st\XKV@define@default{#2}{#4}\fi
+ \ifXKV@pl
+ \def#1##1{\XKV@pltrue\XKV@sttrue
+ \XKV@checkchoice[\XKV@resa]{##1}{true,false}#5%
+ }%
+ \else
+ \def#1##1{\XKV@plfalse\XKV@sttrue
+ \XKV@checkchoice[\XKV@resa]{##1}{true,false}#5%
+ }%
+ \fi
+}
+\def\define@boolkeys{\XKV@plfalse\XKV@testoptd\XKV@define@boolkeys{}}
+\def\XKV@define@boolkeys#1#2[#3]{%
+ \XKV@sp@deflist\XKV@tempa{#2}%
+ \XKV@for@o\XKV@tempa\XKV@tempa{%
+ \expandafter\XKV@d@fine@boolkeys\expandafter{\XKV@tempa}{#1}{#3}%
+ }%
+}
+\def\XKV@d@fine@boolkeys#1#2#3{%
+ \expandafter\XKV@d@f@ne@b@olkey\csname\XKV@header#1\endcsname
+ {#1}{#2#1}{#3}{{\csname#2#1\XKV@resa\endcsname}}%
+}
+\def\XKV@cc{\XKV@testopta{\@testopt\XKV@checkchoice{}}}
+\def\XKV@checkchoice[#1]#2#3{%
+ \def\XKV@tempa{#1}%
+ \ifXKV@st\lowercase{\fi
+ \ifx\XKV@tempa\@empty
+ \def\XKV@tempa{\XKV@ch@ckch@ice\@nil{#2}{#3}}%
+ \else
+ \def\XKV@tempa{\XKV@ch@ckchoice#1\@nil{#2}{#3}}%
+ \fi
+ \ifXKV@st}\fi\XKV@tempa
+}
+\def\XKV@ch@ckchoice#1#2\@nil#3#4{%
+ \def\XKV@tempa{#2}%
+ \ifx\XKV@tempa\@empty\XKV@afterelsefi
+ \XKV@ch@ckch@ice#1{#3}{#4}%
+ \else\XKV@afterfi
+ \XKV@@ch@ckchoice#1#2{#3}{#4}%
+ \fi
+}
+\def\XKV@ch@ckch@ice#1#2#3{%
+ \def\XKV@tempa{#1}%
+ \ifx\XKV@tempa\@nnil\let\XKV@tempa\@empty\else
+ \def\XKV@tempa{\def#1{#2}}%
+ \fi
+ \in@{,#2,}{,#3,}%
+ \ifin@
+ \ifXKV@pl
+ \XKV@addtomacro@n\XKV@tempa\@firstoftwo
+ \else
+ \XKV@addtomacro@n\XKV@tempa\@firstofone
+ \fi
+ \else
+ \ifXKV@pl
+ \XKV@addtomacro@n\XKV@tempa\@secondoftwo
+ \else
+ \XKV@toks{#2}%
+ \XKV@err{value `\the\XKV@toks' is not allowed}%
+ \XKV@addtomacro@n\XKV@tempa\@gobble
+ \fi
+ \fi
+ \XKV@tempa
+}
+\def\XKV@@ch@ckchoice#1#2#3#4{%
+ \edef\XKV@tempa{\the\count@}\count@\z@
+ \def\XKV@tempb{#3}%
+ \def\XKV@tempc##1,{%
+ \def#1{##1}%
+ \ifx#1\@nnil
+ \def#1{#3}\def#2{-1}\count@\XKV@tempa
+ \ifXKV@pl
+ \let\XKV@tempd\@secondoftwo
+ \else
+ \XKV@toks{#3}%
+ \XKV@err{value `\the\XKV@toks' is not allowed}%
+ \let\XKV@tempd\@gobble
+ \fi
+ \else
+ \ifx#1\XKV@tempb
+ \edef#2{\the\count@}\count@\XKV@tempa
+ \ifXKV@pl
+ \let\XKV@tempd\XKV@@ch@ckch@ice
+ \else
+ \let\XKV@tempd\XKV@@ch@ckch@ic@
+ \fi
+ \else
+ \advance\count@\@ne
+ \let\XKV@tempd\XKV@tempc
+ \fi
+ \fi
+ \XKV@tempd
+ }%
+ \XKV@tempc#4,\@nil,%
+}
+\def\XKV@@ch@ckch@ice#1\@nil,{\@firstoftwo}
+\def\XKV@@ch@ckch@ic@#1\@nil,{\@firstofone}
+\def\key@ifundefined{\@testopt\XKV@key@ifundefined{KV}}
+\def\XKV@key@ifundefined[#1]#2{%
+ \XKV@makepf{#1}%
+ \XKV@checksanitizeb{#2}\XKV@fams
+ \expandafter\XKV@sp@deflist\expandafter
+ \XKV@fams\expandafter{\XKV@fams}%
+ \XKV@key@if@ndefined
+}
+\def\XKV@key@if@ndefined#1{%
+ \XKV@knftrue
+ \KV@@sp@def\XKV@tkey{#1}%
+ \XKV@whilist\XKV@fams\XKV@tfam\ifXKV@knf\fi{%
+ \XKV@makehd\XKV@tfam
+ \XKV@ifundefined{\XKV@header\XKV@tkey}{}{\XKV@knffalse}%
+ }%
+ \ifXKV@knf
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+\def\disable@keys{\XKV@testoptb\XKV@disable@keys}
+\def\XKV@disable@keys#1{%
+ \XKV@checksanitizeb{#1}\XKV@tempa
+ \XKV@for@o\XKV@tempa\XKV@tempa{%
+ \XKV@ifundefined{\XKV@header\XKV@tempa}{%
+ \XKV@err{key `\XKV@tempa' undefined}%
+ }{%
+ \edef\XKV@tempb{%
+ \noexpand\XKV@warn{key `\XKV@tempa' has been disabled}%
+ }%
+ \XKV@ifundefined{\XKV@header\XKV@tempa @default}{%
+ \edef\XKV@tempc{\noexpand\XKV@define@key{\XKV@tempa}}%
+ }{%
+ \edef\XKV@tempc{\noexpand\XKV@define@key{\XKV@tempa}[]}%
+ }%
+ \expandafter\XKV@tempc\expandafter{\XKV@tempb}%
+ }%
+ }%
+}
+\def\presetkeys{\XKV@stfalse\XKV@testoptb\XKV@presetkeys}
+\def\gpresetkeys{\XKV@sttrue\XKV@testoptb\XKV@presetkeys}
+\def\XKV@presetkeys#1#2{%
+ \XKV@pr@setkeys{#1}{preseth}%
+ \XKV@pr@setkeys{#2}{presett}%
+}
+\def\XKV@pr@setkeys#1#2{%
+ \XKV@ifundefined{XKV@\XKV@header#2}{%
+ \XKV@checksanitizea{#1}\XKV@tempa
+ \ifXKV@st\expandafter\global\fi\expandafter\def\csname
+ XKV@\XKV@header#2\expandafter\endcsname\expandafter{\XKV@tempa}%
+ }{%
+ \expandafter\XKV@merge\csname XKV@\XKV@header
+ #2\endcsname{#1}\XKV@getkeyname
+ }%
+}
+\def\delpresetkeys{\XKV@stfalse\XKV@testoptb\XKV@delpresetkeys}
+\def\gdelpresetkeys{\XKV@sttrue\XKV@testoptb\XKV@delpresetkeys}
+\def\XKV@delpresetkeys#1#2{%
+ \XKV@d@lpresetkeys{#1}{preseth}%
+ \XKV@d@lpresetkeys{#2}{presett}%
+}
+\def\XKV@d@lpresetkeys#1#2{%
+ \XKV@ifundefined{XKV@\XKV@header#2}{%
+ \XKV@err{no presets defined for `\XKV@header'}%
+ }{%
+ \expandafter\XKV@delete\csname XKV@\XKV@header
+ #2\endcsname{#1}\XKV@getkeyname
+ }%
+}
+\def\unpresetkeys{\XKV@stfalse\XKV@testoptb\XKV@unpresetkeys}
+\def\gunpresetkeys{\XKV@sttrue\XKV@testoptb\XKV@unpresetkeys}
+\def\XKV@unpresetkeys{%
+ \XKV@ifundefined{XKV@\XKV@header preseth}{%
+ \XKV@err{no presets defined for `\XKV@header'}%
+ }{%
+ \ifXKV@st\expandafter\global\fi\expandafter\let
+ \csname XKV@\XKV@header preseth\endcsname\@undefined
+ \ifXKV@st\expandafter\global\fi\expandafter\let
+ \csname XKV@\XKV@header presett\endcsname\@undefined
+ }%
+}
+\def\savekeys{\XKV@stfalse\XKV@testoptb\XKV@savekeys}
+\def\gsavekeys{\XKV@sttrue\XKV@testoptb\XKV@savekeys}
+\def\XKV@savekeys#1{%
+ \XKV@ifundefined{XKV@\XKV@header save}{%
+ \XKV@checksanitizeb{#1}\XKV@tempa
+ \ifXKV@st\expandafter\global\fi\expandafter\def\csname XKV@%
+ \XKV@header save\expandafter\endcsname\expandafter{\XKV@tempa}%
+ }{%
+ \expandafter\XKV@merge\csname XKV@\XKV@header
+ save\endcsname{#1}\XKV@getsg
+ }%
+}
+\def\delsavekeys{\XKV@stfalse\XKV@testoptb\XKV@delsavekeys}
+\def\gdelsavekeys{\XKV@sttrue\XKV@testoptb\XKV@delsavekeys}
+\def\XKV@delsavekeys#1{%
+ \XKV@ifundefined{XKV@\XKV@header save}{%
+ \XKV@err{no save keys defined for `\XKV@header'}%
+ }{%
+ \expandafter\XKV@delete\csname XKV@\XKV@header
+ save\endcsname{#1}\XKV@getsg
+ }%
+}
+\def\unsavekeys{\XKV@stfalse\XKV@testoptb\XKV@unsavekeys}
+\def\gunsavekeys{\XKV@sttrue\XKV@testoptb\XKV@unsavekeys}
+\def\XKV@unsavekeys{%
+ \XKV@ifundefined{XKV@\XKV@header save}{%
+ \XKV@err{no save keys defined for `\XKV@header'}%
+ }{%
+ \ifXKV@st\expandafter\global\fi\expandafter\let
+ \csname XKV@\XKV@header save\endcsname\@undefined
+ }%
+}
+\def\setkeys{\XKV@testopta{\XKV@testoptc\XKV@setkeys}}
+\def\XKV@setkeys[#1]#2{%
+ \XKV@checksanitizea{#2}\XKV@resb
+ \let\XKV@naa\@empty
+ \XKV@for@o\XKV@resb\XKV@tempa{%
+ \expandafter\XKV@g@tkeyname\XKV@tempa=\@nil\XKV@tempa
+ \XKV@addtolist@x\XKV@naa\XKV@tempa
+ }%
+ \let\XKV@rm\@empty
+ \XKV@usepresetkeys{#1}{preseth}%
+ \expandafter\XKV@s@tkeys\expandafter{\XKV@resb}{#1}%
+ \XKV@usepresetkeys{#1}{presett}%
+ \let\CurrentOption\@empty
+}
+\def\XKV@usepresetkeys#1#2{%
+ \XKV@presettrue
+ \XKV@for@eo\XKV@fams\XKV@tfam{%
+ \XKV@makehd\XKV@tfam
+ \XKV@ifundefined{XKV@\XKV@header#2}{}{%
+ \XKV@toks\expandafter\expandafter\expandafter
+ {\csname XKV@\XKV@header#2\endcsname}%
+ \@expandtwoargs\XKV@s@tkeys{\the\XKV@toks}%
+ {\XKV@naa\ifx\XKV@naa\@empty\else,\fi#1}%
+ }%
+ }%
+ \XKV@presetfalse
+}
+\def\XKV@s@tkeys#1#2{%
+ \XKV@sp@deflist\XKV@na{#2}%
+ \XKV@for@n{#1}\CurrentOption{%
+ \expandafter\XKV@s@tk@ys\CurrentOption==\@nil
+ }%
+}
+\def\XKV@s@tk@ys#1=#2=#3\@nil{%
+ \XKV@g@tkeyname#1=\@nil\XKV@tkey
+ \expandafter\KV@@sp@def\expandafter\XKV@tkey\expandafter{\XKV@tkey}%
+ \ifx\XKV@tkey\@empty
+ \XKV@toks{#2}%
+ \ifcat$\the\XKV@toks$\else
+ \XKV@err{no key specified for value `\the\XKV@toks'}%
+ \fi
+ \else
+ \@expandtwoargs\in@{,\XKV@tkey,}{,\XKV@na,}%
+ \ifin@\else
+ \XKV@knftrue
+ \KV@@sp@def\XKV@tempa{#2}%
+ \ifXKV@preset\XKV@s@tk@ys@{#3}\else
+ \ifXKV@pl
+ \XKV@for@eo\XKV@fams\XKV@tfam{%
+ \XKV@makehd\XKV@tfam
+ \XKV@s@tk@ys@{#3}%
+ }%
+ \else
+ \XKV@whilist\XKV@fams\XKV@tfam\ifXKV@knf\fi{%
+ \XKV@makehd\XKV@tfam
+ \XKV@s@tk@ys@{#3}%
+ }%
+ \fi
+ \fi
+ \ifXKV@knf
+ \ifXKV@inpox
+ \ifx\XKV@doxs\relax
+ \ifx\@currext\@clsextension\else
+ \let\CurrentOption\XKV@tkey\@unknownoptionerror
+ \fi
+ \else\XKV@doxs\fi
+ \else
+ \ifXKV@st
+ \global\XKV@addtolist@o\XKV@rm\CurrentOption
+ \else
+ \XKV@err{`\XKV@tkey' undefined in families `\XKV@fams'}%
+ \fi
+ \fi
+ \else
+ \ifXKV@inpox\ifx\XKV@testclass\XKV@documentclass
+ \expandafter\XKV@useoption\expandafter{\CurrentOption}%
+ \fi\fi
+ \fi
+ \fi
+ \fi
+}
+\def\XKV@s@tk@ys@#1{%
+ \XKV@ifundefined{\XKV@header\XKV@tkey}{}{%
+ \XKV@knffalse
+ \XKV@ifundefined{XKV@\XKV@header save}{}{%
+ \expandafter\XKV@testsavekey\csname XKV@\XKV@header
+ save\endcsname\XKV@tkey
+ }%
+ \ifXKV@rkv
+ \ifXKV@sg\expandafter\global\fi\expandafter\let
+ \csname XKV@\XKV@header\XKV@tkey @value\endcsname\XKV@tempa
+ \fi
+ \expandafter\XKV@replacepointers\expandafter{\XKV@tempa}%
+ \ifx\@empty#1\@empty\XKV@afterelsefi
+ \XKV@ifundefined{\XKV@header\XKV@tkey @default}{%
+ \XKV@err{no value specified for key `\XKV@tkey'}%
+ }{%
+ \expandafter\expandafter\expandafter\XKV@default
+ \csname\XKV@header\XKV@tkey @default\endcsname\@nil
+ }%
+ \else\XKV@afterfi
+ \XKV@srstate{@\romannumeral\XKV@depth}{}%
+ \csname\XKV@header\XKV@tkey\expandafter
+ \endcsname\expandafter{\XKV@tempa}\relax
+ \XKV@srstate{}{@\romannumeral\XKV@depth}%
+ \fi
+ }%
+}
+\def\XKV@testsavekey#1#2{%
+ \ifXKV@rkv\else
+ \XKV@for@o#1\XKV@resa{%
+ \expandafter\XKV@ifcmd\expandafter{\XKV@resa}\global\XKV@resa{%
+ \ifx#2\XKV@resa
+ \XKV@rkvtrue\XKV@sgtrue
+ \fi
+ }{%
+ \ifx#2\XKV@resa
+ \XKV@rkvtrue\XKV@sgfalse
+ \fi
+ }%
+ }%
+ \fi
+}
+\def\XKV@replacepointers#1{%
+ \let\XKV@tempa\@empty
+ \let\XKV@resa\@empty
+ \XKV@r@placepointers#1\usevalue\@nil
+}
+\def\XKV@r@placepointers#1\usevalue#2{%
+ \XKV@addtomacro@n\XKV@tempa{#1}%
+ \def\XKV@tempb{#2}%
+ \ifx\XKV@tempb\@nnil\else\XKV@afterfi
+ \XKV@ifundefined{XKV@\XKV@header#2@value}{%
+ \XKV@err{no value recorded for key `#2'; ignored}%
+ \XKV@r@placepointers
+ }{%
+ \@expandtwoargs\in@{,#2,}{,\XKV@resa,}%
+ \ifin@\XKV@afterelsefi
+ \XKV@err{back linking pointers; pointer replacement canceled}%
+ \else\XKV@afterfi
+ \XKV@addtolist@x\XKV@resa{#2}%
+ \expandafter\expandafter\expandafter\XKV@r@placepointers
+ \csname XKV@\XKV@header#2@value\endcsname
+ \fi
+ }%
+ \fi
+}
+\def\XKV@default#1#2\@nil{%
+ \expandafter\edef\expandafter\XKV@tempa
+ \expandafter{\expandafter\@gobble\string#1}%
+ \edef\XKV@tempb{\XKV@header\XKV@tkey}%
+ \@onelevel@sanitize\XKV@tempb
+ \ifx\XKV@tempa\XKV@tempb
+ \begingroup
+ \expandafter\def\csname\XKV@header\XKV@tkey\endcsname##1{%
+ \gdef\XKV@tempa{##1}%
+ }%
+ \csname\XKV@header\XKV@tkey @default\endcsname
+ \endgroup
+ \XKV@ifundefined{XKV@\XKV@header save}{}{%
+ \expandafter\XKV@testsavekey\csname XKV@\XKV@header
+ save\endcsname\XKV@tkey
+ }%
+ \ifXKV@rkv
+ \ifXKV@sg\expandafter\global\fi\expandafter\let
+ \csname XKV@\XKV@header\XKV@tkey @value\endcsname\XKV@tempa
+ \fi
+ \expandafter\XKV@replacepointers\expandafter
+ {\XKV@tempa}\XKV@afterelsefi
+ \XKV@srstate{@\romannumeral\XKV@depth}{}%
+ \expandafter#1\expandafter{\XKV@tempa}\relax
+ \XKV@srstate{}{@\romannumeral\XKV@depth}%
+ \else\XKV@afterfi
+ \XKV@srstate{@\romannumeral\XKV@depth}{}%
+ \csname\XKV@header\XKV@tkey @default\endcsname\relax
+ \XKV@srstate{}{@\romannumeral\XKV@depth}%
+ \fi
+}
+\def\setrmkeys{\XKV@testopta{\XKV@testoptc\XKV@setrmkeys}}
+\def\XKV@setrmkeys[#1]{%
+ \def\XKV@tempa{\XKV@setkeys[#1]}%
+ \expandafter\XKV@tempa\expandafter{\XKV@rm}%
+}
+\XKVcatcodes
+\endinput
+%%
+%% End of file `xkeyval.tex'.
diff --git a/Master/texmf-dist/tex/generic/xkeyval/xkvtxhdr.tex b/Master/texmf-dist/tex/generic/xkeyval/xkvtxhdr.tex
new file mode 100644
index 00000000000..5beb03c3bd2
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/xkeyval/xkvtxhdr.tex
@@ -0,0 +1,91 @@
+%%
+%% This is file `xkvtxhdr.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xkeyval.dtx (with options: `xkvheader')
+%%
+%% ---------------------------------------
+%% Copyright (C) 2004-2006 Hendri Adriaens
+%% ---------------------------------------
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Hendri Adriaens.
+%%
+%% This work consists of the file xkeyval.dtx and derived files
+%% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls,
+%% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex,
+%% xkvex3.tex and xkvex4.tex.
+%%
+%% The following files constitute the xkeyval bundle and must be
+%% distributed as a whole: readme, xkeyval.pdf, keyval.tex,
+%% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty,
+%% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx.
+%%
+%%
+%% Taken from latex.ltx.
+%%
+\message{2005/02/22 v1.1 xkeyval TeX header (HA)}
+\def\@nnil{\@nil}
+\def\@empty{}
+\def\newif#1{%
+ \count@\escapechar \escapechar\m@ne
+ \let#1\iffalse
+ \@if#1\iftrue
+ \@if#1\iffalse
+ \escapechar\count@}
+\def\@if#1#2{%
+ \expandafter\def\csname\expandafter\@gobbletwo\string#1%
+ \expandafter\@gobbletwo\string#2\endcsname
+ {\let#1#2}}
+\long\def\@ifnextchar#1#2#3{%
+ \let\reserved@d=#1%
+ \def\reserved@a{#2}%
+ \def\reserved@b{#3}%
+ \futurelet\@let@token\@ifnch}
+\def\@ifnch{%
+ \ifx\@let@token\@sptoken
+ \let\reserved@c\@xifnch
+ \else
+ \ifx\@let@token\reserved@d
+ \let\reserved@c\reserved@a
+ \else
+ \let\reserved@c\reserved@b
+ \fi
+ \fi
+ \reserved@c}
+\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token
+\def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch}
+\let\kernel@ifnextchar\@ifnextchar
+\long\def\@testopt#1#2{%
+ \kernel@ifnextchar[{#1}{#1[{#2}]}}
+\long\def\@firstofone#1{#1}
+\long\def \@gobble #1{}
+\long\def \@gobbletwo #1#2{}
+\def\@expandtwoargs#1#2#3{%
+\edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a}
+\edef\@backslashchar{\expandafter\@gobble\string\\}
+\newif\ifin@
+\def\in@#1#2{%
+ \def\in@@##1#1##2##3\in@@{%
+ \ifx\in@##2\in@false\else\in@true\fi}%
+ \in@@#2#1\in@\in@@}
+\def\strip@prefix#1>{}
+\def \@onelevel@sanitize #1{%
+ \edef #1{\expandafter\strip@prefix
+ \meaning #1}%
+}
+\endinput
+%%
+%% End of file `xkvtxhdr.tex'.