diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/oberdiek/kvoptions-patch.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/oberdiek/kvoptions-patch.sty | 489 |
1 files changed, 489 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/oberdiek/kvoptions-patch.sty b/Master/texmf-dist/tex/latex/oberdiek/kvoptions-patch.sty new file mode 100644 index 00000000000..975343b7574 --- /dev/null +++ b/Master/texmf-dist/tex/latex/oberdiek/kvoptions-patch.sty @@ -0,0 +1,489 @@ +%% +%% 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. +%% +%% Copyright (C) 2004, 2006, 2007 by +%% Heiko Oberdiek <oberdiek@uni-freiburg.de> +%% +%% 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. +\NeedsTeXFormat{LaTeX2e} +\expandafter\edef\csname KVO@AtEnd\endcsname{% + \catcode64 \the\catcode64\relax +} +\catcode64 11 % @ +\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{61}{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}% + [2007/10/18 v3.0 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 + \toks@\expandafter{\@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 + \@for\CurrentOption:=\@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'. |