diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/oberdiek/kvsetkeys.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/oberdiek/kvsetkeys.dtx | 1686 |
1 files changed, 0 insertions, 1686 deletions
diff --git a/Master/texmf-dist/source/latex/oberdiek/kvsetkeys.dtx b/Master/texmf-dist/source/latex/oberdiek/kvsetkeys.dtx deleted file mode 100644 index 7bbd4fe568e..00000000000 --- a/Master/texmf-dist/source/latex/oberdiek/kvsetkeys.dtx +++ /dev/null @@ -1,1686 +0,0 @@ -% \iffalse meta-comment -% -% File: kvsetkeys.dtx -% Version: 2016/05/16 v1.17 -% Info: Key value parser -% -% Copyright (C) -% 2006, 2007, 2009-2012 Heiko Oberdiek -% 2016-2019 Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% 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/oberdiek/issues -% -% The Base Interpreter refers to any `TeX-Format', -% because some files are installed in TDS:tex/generic//. -% -% This work consists of the main source file kvsetkeys.dtx -% and the derived files -% kvsetkeys.sty, kvsetkeys.pdf, kvsetkeys.ins, kvsetkeys.drv, -% kvsetkeys-example.tex, kvsetkeys-test1.tex, -% kvsetkeys-test2.tex, kvsetkeys-test3.tex, -% kvsetkeys-test4.tex. -% -% Distribution: -% CTAN:macros/latex/contrib/oberdiek/kvsetkeys.dtx -% CTAN:macros/latex/contrib/oberdiek/kvsetkeys.pdf -% -% Unpacking: -% (a) If kvsetkeys.ins is present: -% tex kvsetkeys.ins -% (b) Without kvsetkeys.ins: -% tex kvsetkeys.dtx -% (c) If you insist on using LaTeX -% latex \let\install=y\input{kvsetkeys.dtx} -% (quote the arguments according to the demands of your shell) -% -% Documentation: -% (a) If kvsetkeys.drv is present: -% latex kvsetkeys.drv -% (b) Without kvsetkeys.drv: -% latex kvsetkeys.dtx; ... -% The class ltxdoc loads the configuration file ltxdoc.cfg -% if available. Here you can specify further options, e.g. -% use A4 as paper format: -% \PassOptionsToClass{a4paper}{article} -% -% Programm calls to get the documentation (example): -% pdflatex kvsetkeys.dtx -% makeindex -s gind.ist kvsetkeys.idx -% pdflatex kvsetkeys.dtx -% makeindex -s gind.ist kvsetkeys.idx -% pdflatex kvsetkeys.dtx -% -% Installation: -% TDS:tex/generic/oberdiek/kvsetkeys.sty -% TDS:doc/latex/oberdiek/kvsetkeys.pdf -% TDS:doc/latex/oberdiek/kvsetkeys-example.tex -% TDS:source/latex/oberdiek/kvsetkeys.dtx -% -%<*ignore> -\begingroup - \catcode123=1 % - \catcode125=2 % - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase 0\ifx\install y1\fi\expandafter - \ifx\csname processbatchFile\endcsname\relax\else1\fi - \ifx\fmtname\x\else 1\fi\relax -\else\csname fi\endcsname -%</ignore> -%<*install> -\input docstrip.tex -\Msg{************************************************************************} -\Msg{* Installation} -\Msg{* Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO)} -\Msg{************************************************************************} - -\keepsilent -\askforoverwritefalse - -\let\MetaPrefix\relax -\preamble - -This is a generated file. - -Project: kvsetkeys -Version: 2016/05/16 v1.17 - -Copyright (C) - 2006, 2007, 2009-2012 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/oberdiek/issues - - -The Base Interpreter refers to any `TeX-Format', -because some files are installed in TDS:tex/generic//. - -This work consists of the main source file kvsetkeys.dtx -and the derived files - kvsetkeys.sty, kvsetkeys.pdf, kvsetkeys.ins, kvsetkeys.drv, - kvsetkeys-example.tex, kvsetkeys-test1.tex, - kvsetkeys-test2.tex, kvsetkeys-test3.tex, - kvsetkeys-test4.tex. - -\endpreamble -\let\MetaPrefix\DoubleperCent - -\generate{% - \file{kvsetkeys.ins}{\from{kvsetkeys.dtx}{install}}% - \file{kvsetkeys.drv}{\from{kvsetkeys.dtx}{driver}}% - \usedir{tex/generic/oberdiek}% - \file{kvsetkeys.sty}{\from{kvsetkeys.dtx}{package}}% - \usedir{doc/latex/oberdiek}% - \file{kvsetkeys-example.tex}{\from{kvsetkeys.dtx}{example}}% -% \usedir{doc/latex/oberdiek/test}% -% \file{kvsetkeys-test1.tex}{\from{kvsetkeys.dtx}{test1}}% -% \file{kvsetkeys-test2.tex}{\from{kvsetkeys.dtx}{test2}}% -% \file{kvsetkeys-test3.tex}{\from{kvsetkeys.dtx}{test2,noetex}}% -% \file{kvsetkeys-test4.tex}{\from{kvsetkeys.dtx}{test4}}% -} - -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* file into a directory searched by TeX:} -\Msg{*} -\Msg{* kvsetkeys.sty} -\Msg{*} -\Msg{* To produce the documentation run the file `kvsetkeys.drv'} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} - -\endbatchfile -%</install> -%<*ignore> -\fi -%</ignore> -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{kvsetkeys.drv}% - [2016/05/16 v1.17 Key value parser (HO)]% -\documentclass{ltxdoc} -\usepackage{holtxdoc}[2011/11/22] -\begin{document} - \DocInput{kvsetkeys.dtx}% -\end{document} -%</driver> -% \fi -% -% -% -% \GetFileInfo{kvsetkeys.drv} -% -% \title{The \xpackage{kvsetkeys} package} -% \date{2016/05/16 v1.17} -% \author{Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} -% -% \maketitle -% -% \begin{abstract} -% Package \xpackage{kvsetkeys} provides \cs{kvsetkeys}, a variant -% of package \xpackage{keyval}'s \cs{setkeys}. It allows to specify -% a handler that deals with unknown options. Active commas and equal -% signs may be used (e.g. see \xpackage{babel}'s shorthands) and -% only one level of curly braces is removed from the values. -% \end{abstract} -% -% \tableofcontents -% -% \def\M#1{\texttt{\{}\meta{#1}\texttt{\}}} -% -% \section{Documentation} -% -% First I want to recommend the very good review article -% ``A guide to key-value methods'' by Joseph Wright \cite{tb94wright}. -% It introduces the different key-value packages and compares them. -% -% \subsection{Motivation} -% -% \cs{kvsetkeys} serves as replacement for \xpackage{keyval}'s -% \cs{setkeys}. It basically uses the same syntax. But the -% implementation is more robust and predictable: -% \begin{description} -% \item[Active syntax characters:] -% Comma `|,|' and the equals sign `|=|' are used inside -% key value lists as syntax characters. Package \xpackage{keyval} -% uses the catcode of the characters that is active during -% package loading, usually this is catcode 12 (other). -% But it can happen that the catcode setting of the syntax characters -% changes. Especially active characters are of interest, because -% some language adaptations uses them. For example, option \xoption{turkish} -% of package \xpackage{babel} uses the equals sign as active shorthand -% character. Therefore package \xpackage{kvsetkeys} deals with -% both catcode settings 12 (other) and 13 (active). -% \item[Brace removal:] -% Package \xpackage{keyval}'s \cs{setkeys} removes up to two -% levels of curly braces around the value in some unpredictable way: -%\begin{quote} -%|\setkeys{fam}{key={{value}}} || || | $\rightarrow$ |value|\\ -%|\setkeys{fam}{key={{{value}}}} | $\rightarrow$ |{value}|\\ -%|\setkeys{fam}{key= {{{value}}}}| $\rightarrow$ |{{value}}| -%\end{quote} -% This package \xpackage{kvsetkeys} follows a much stronger rule: -% Exactly one level of braces are removed from an item, if the -% item is surrounded by curly braces. An item can be a -% the key value pair, the key or the value. -%\begin{quote} -%|\kvsetkeys{fam}{key={value}} || | $\rightarrow$ |value|\\ -%|\kvsetkeys{fam}{key={{value}} | $\rightarrow$ |{value}|\\ -%|\kvsetkeys{fam}{key= {{value}}| $\rightarrow$ |{value}| -%\end{quote} -% \item[Arbitrary values:] Unmatched conditionals are supported. -% \end{description} -% -% Before I describe -% \cs{kvsetkeys} in more detail, first I want to explain, how -% this package deals with key value lists. For the package also -% provides low level interfaces that can be used by package authors. -% -% \subsection{Normalizing key value lists} -% -% \begin{declcs}{kv@normalize}\,\M{key value list} -% \end{declcs} -% If the user specifies key value lists, he usually prefers -% nice formatted source code, e.g.: -% \begin{quote} -%\begin{verbatim} -%\hypersetup{ -% pdftitle = {...}, -% pdfsubject = {...}, -% pdfauthor = {...}, -% pdfkeywords = {...}, -% ... -%} -%\end{verbatim} -% \end{quote} -% Thus there can be spaces around keys, around |=| or around the value. -% Also empty entries are possible by too many commas. Therefore these -% spaces and empty entries are silently removed by package \xpackage{keyval} -% and this package. Whereas the contents of the value can be protected -% by curly braces, especially if spaces or commas are used inside, -% a key name must not use spaces or other syntax characters. -% -% \cs{kv@normalize} takes a key value list and performs the cleanup: -% \begin{itemize} -% \item Spaces are removed. -% \item Syntax characters (comma and equal sign) that are active -% are replaced by the same characters with standard catcode. -% (Example: \xpackage{babel}'s language option \xoption{turkish} -% uses the equal sign as active shorthand character.) -% \end{itemize} -% The result is stored in \cs{kv@list}, e.g.: -% \begin{quote} -% |\kv@list| $\rightarrow$ |,pdftitle={...},pdfsubject={...},...,| -% \end{quote} -% Curly braces around values (or keys) remain untouched. -% \begin{description} -% \item[v1.3+:] -% One comma is added in front of the list and each pair ends with -% a comma. Thus an empty list consists of one comma, otherwise -% two commas encloses the list. Empty entries other than the first -% are removed. -% \item[v1.0 -- v1.2:] -% Empty entries are removed later. In fact it adds a comma at the begin -% and end to protect the last value and an easier implementation. -% \end{description} -% -% \subsection{Parsing key value lists} -% -% \begin{declcs}{kv@parse}\,\M{key value list}\,\M{processor} -% \end{declcs} -% It is easier to parse a normalized list, thus \cs{kv@parse} -% normalizes the list and calls \cs{kv@parse@normalized}. -% -% \begin{declcs}{kv@parse@normalized}\,\M{key value list}% -% \,\M{processor} -% \end{declcs} -% Now the key value list is split into single key value pairs. -% For further processing the key and value are given as arguments -% for the \meta{processor}: -% \begin{quote} -% \meta{processor}\,\M{key}\,\M{value} -% \end{quote} -% Also key and value are stored in macro names: -% \begin{itemize} -% \item \cs{kv@key} stores the key. -% \item \cs{kv@value} stores the value or if the value was not -% specified it has the meaning \cs{relax}. -% \end{itemize} -% The behaviour in pseudo code: -% \begin{quote} -% foreach (\meta{key}, \meta{value}) in (\meta{key value list})\\ -% \hspace*{1.5em}\cs{kv@key} := \meta{key}\\ -% \hspace*{1.5em}\cs{kv@value} := \meta{value}\\ -% \hspace*{1.5em}\meta{processor}\,\M{key}\,\M{value} -% \end{quote} -% -% \begin{declcs}{kv@break} -% \end{declcs} -% Since version 2011/03/03 v1.11 \cs{kv@break} can be -% called inside the \meta{processor} -% of \cs{kv@parse} or \cs{kv@parse@normalized}, then -% the processing is stopped and the following entries discarded. -% -% \subsection{Processing key value pairs} -% -% Key value pairs can be processed in many different ways. -% For example, the processor for \cs{kvsetkeys} works similar -% to \cs{setkeys} of package \xpackage{keyval}. There unknown -% keys raise an error. -% -% Package \xpackage{xkeyval} also knows a star form of \cs{setkeys} -% that stores unknown keys in an internal macro for further processing -% with \cs{setrmkeys} and similar macros. This feature is covered -% by processor \cs{kv@processor@known}. -% -% \subsubsection{Processing similar to \xpackage{keyval}} -% -% \begin{declcs}{kv@processor@default}\,\M{family}\,\M{key}\,\M{value} -% \end{declcs} -% There are many possiblities to process key value pairs. -% \cs{kv@processor@default} is the processor used in \cs{kvsetkeys}. -% It reimplements and extends the behaviour of -% \xpackage{keyval}'s \cs{setkeys}. -% In case of unknown keys \cs{setkeys} raise an error. -% This processer, however, calls a handler instead, if it -% is provided by the family. Both \meta{family} and \meta{key} -% may contain package \xpackage{babel}'s shorthands -% (since 2011/04/07 v1.13). -% -% Since 2011/10/18 v1.15 the family handler can reject the -% successful handling of a key by calling \cs{kv@handled@false}. -% -% Since 2016/05/16 v1.17 \cs{kv@processor@default} also defines -% macro \cs{kv@fam} with meaning \meta{family} for convenience. -% -% \subsubsection{Processing similar to \cs{setkeys*} of package \xpackage{xkeyval}} -% -% \begin{declcs}{kv@processor@known}\,\M{family}\,^^A -% \M{cmd}\,\M{key}\,\M{value} -% \end{declcs} -% The key value processor \cs{kv@processor@known} behaves similar -% to \cs{kv@processor@default}. If the \meta{key} exists in the -% \meta{family} its code is called, otherwise the family handler -% is tried. If the family handler is not set or cannot handle the -% key, the unknown key value pair is added to the macro \meta{cmd}. -% Since 2011/10/18 v1.15. -% -% The behaviour in pseudo code: -% \begin{quote} -% if \meta{key} exists\\ -% \hspace*{1.5em}call the keyval code of \meta{key}\\ -% else\\ -% \hspace*{1.5em}if \meta{handler} for \meta{family} exists\\ -% \hspace*{3em}handled = true\\ -% \hspace*{3em}\meta{handler}\,\M{key}\,\M{value}\\ -% \hspace*{3em}if handled\\ -% \hspace*{3em}else\\ -% \hspace*{4.5em}add \texttt{"}\M{key}\texttt{=}\M{value}\texttt{"} -% to \M{cmd}\\ -% \hspace*{3em}fi\\ -% \hspace*{1.5em}else\\ -% \hspace*{3em}add \texttt{"}\M{key}\texttt{=}\M{value}\texttt{"} -% to \M{cmd}\\ -% \hspace*{3em}raise unknown key error\\ -% \hspace*{1.5em}fi\\ -% fi -% \end{quote} -% -% Since 2016/05/16 v1.17 \cs{kv@processor@known} also defines -% macro \cs{kv@fam} with meaning \meta{family} for convenience. -% -% \subsection{Default family handler} -% -% \cs{kv@processor@default} calls \meta{handler}, the default -% handler for the family, if the key does not exist in the family. -% The handler is called with two arguments, the key and the value. -% It can be defined with \cs{kv@set@family@hander}: -% -% \begin{declcs}{kv@set@family@handler}\,\M{family}\,\M{handler definition} -% \end{declcs} -% This sets the default family handler for the keyval family -% \meta{family}. Inside \meta{handler definition} |#1| stands for -% the key and |#2| is the value. Also \cs{kv@key} and \cs{kv@value} -% can be used for the key and the value. If the value is not given, -% \cs{kv@value} has the meaning \cs{relax}. -% -% \begin{declcs}{kv@unset@family@handler}\,\M{family} -% \end{declcs} -% It removes the family handler for \meta{family}. -% Since 2011/10/18 v1.15. -% -% \subsection{Put it all together} -% -% \begin{declcs}{kvsetkeys}\,\M{family}\,\M{key value list} -% \end{declcs} -% Macro \cs{kvsetkeys} processes the \meta{key value list} with -% the standard processor \cs{kv@processor@default}: -% \begin{quote} -% \cs{kv@parse}\,\M{key value list}^^A -% \texttt{\{}\cs{kv@processor@default}\,\M{family}\texttt{\}} -% \end{quote} -% -% \begin{declcs}{kvsetknownkeys}\,\M{family}\,\M{cmd}\,\M{key value list} -% \end{declcs} -% Macro \cs{kvsetknownkeys} processes the \meta{key value list} -% with processor \cs{kv@processor@known}. All key value pairs -% with keys that are not known in \meta{family} are stored -% in macro \meta{cmd}. A previous contents of macro \meta{cmd} -% will be overwritten. If all keys can be handled, \meta{cmd} -% will be empty, otherwise it contains a key value list of -% unhandled key value pairs. -% Since 2011/10/18 v1.15. -% -% Pseudo code: -% \begin{quote} -% create macro \meta{cmdaux} with unique name (inside the current group)\\ -% \cs{def}\meta{cmdaux}\{\}\\ -% \cs{kv@parse}\,\M{key value list}^^A -% \texttt{\{}\cs{kv@processor@known}\,\M{family}\,\M{cmdaux}\texttt{\}}\\ -% \cs{let}\meta{cmd}=\meta{cmdaux} -% \end{quote} -% -% \begin{declcs}{kvsetkeys@expandafter}\,\M{family}\,\M{list cmd}\\ -% \cs{kvsetknownkeys@expandafter}\,\M{family}\,% -% \M{cmd}\,\M{list cmd} -% \end{declcs} -% Both macros behave like the counterparts without suffix -% |@expandafter|. The difference is that the key value list is -% given as macro that is expanded once. -% Since 2011/10/18 v1.15. -% -% Thus you can replace \cs{setkeys} of package \xpackage{keyval} -% by the key value parser of this package: -% \begin{quote} -% |\renewcommand*{\setkeys}{\kvsetkeys}|\\ -% or\\ -% |\let\setkeys\kvsetkeys| -% \end{quote} -% -% \subsection{Comma separated lists} -% -% Since version 2007/09/29 v1.3 this package also supports the normalizing -% and parsing of general comma separated lists. -% -% \begin{declcs}{comma@normalize}\,\M{comma list} -% \end{declcs} -% Macro \cs{comma@normalize} normalizes the comma separated list, -% removes spaces around commas. The result is put in macro \cs{comma@list}. -% -% \begin{declcs}{comma@parse}\,\M{comma list}\,\M{processor} -% \end{declcs} -% Macro \cs{comma@parse} first normalizes the comma separated list -% and then parses the list by calling \cs{comma@parse@normalized}. -% -% \begin{declcs}{comma@parse@normalized}\,\M{normalized comma list}^^A -% \,\M{processor} -% \end{declcs} -% The list is parsed. Empty entries are ignored. \meta{processor} -% is called for each non-empty entry with the entry as argument: -% \begin{quote} -% \meta{processor}|{|\meta{entry}|}| -% \end{quote} -% Also the entry is stored in the macro \cs{comma@entry}. -% -% \begin{declcs}{comma@break} -% \end{declcs} -% Since version 2011/03/03 v1.11 \cs{comma@break} can be -% called inside the \meta{processor} -% of \cs{comma@parse} or \cs{comma@parse@normalized}, then -% the processing is stopped and the following entries discarded. -% -% \section{Example} -% -% The following example prints a short piece of HTML code using -% the tabbing environment for indenting purpose and a key value -% syntax for specifying the attributes of an HTML tag. -% The example illustrates the use of a default family handler. -% \begin{macrocode} -%<*example> -\documentclass{article} -\usepackage[T1]{fontenc} -\usepackage{kvsetkeys} -\usepackage{keyval} - -\makeatletter -\newcommand*{\tag}[2][]{% - % #1: attributes - % #2: tag name - \begingroup - \toks@={}% - \let\@endslash\@empty - \kvsetkeys{tag}{#1}% - \texttt{% - \textless #2\the\toks@\@endslash\textgreater - }% - \endgroup -} -\kv@set@family@handler{tag}{% - % #1: key - % #2: value - \toks@\expandafter{% - \the\toks@ - \space - #1=\string"#2\string"% - }% -} -\define@key{tag}{/}[]{% - \def\@endslash{/}% -} -\makeatother - -\begin{document} -\begin{tabbing} - \mbox{}\qquad\=\qquad\=\kill - \tag{html}\\ - \>\dots\\ - \>\tag[border=1]{table}\\ - \>\>\tag[width=200, span=3, /]{colgroup}\\ - \>\>\dots\\ - \>\tag{/table}\\ - \>\dots\\ - \tag{/html}\\ -\end{tabbing} -\end{document} -%</example> -% \end{macrocode} -% -% \StopEventually{ -% } -% -% \section{Implementation} -% -% \subsection{Identification} -% -% \begin{macrocode} -%<*package> -% \end{macrocode} -% Reload check, especially if the package is not used with \LaTeX. -% \begin{macrocode} -\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@kvsetkeys.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{kvsetkeys}{The package is already loaded}% - \aftergroup\endinput - \fi - \fi -\endgroup% -% \end{macrocode} -% Package identification: -% \begin{macrocode} -\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@kvsetkeys.sty\endcsname -\ProvidesPackage{kvsetkeys}% - [2016/05/16 v1.17 Key value parser (HO)]% -% \end{macrocode} -% -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode123=1 % { - \catcode125=2 % } - \catcode64=11 % @ - \def\x{\endgroup - \expandafter\edef\csname KVS@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\KVS@AtEnd{% - \KVS@AtEnd - \catcode#1=\the\catcode#1\relax - }% - \catcode#1=#2\relax -} -\TMP@EnsureCode{36}{3}% $ -\TMP@EnsureCode{38}{4}% & -\TMP@EnsureCode{39}{12}% ' -\TMP@EnsureCode{43}{12}% + -\TMP@EnsureCode{44}{12}% , -\TMP@EnsureCode{45}{12}% - -\TMP@EnsureCode{46}{12}% . -\TMP@EnsureCode{47}{12}% / -\TMP@EnsureCode{91}{12}% [ -\TMP@EnsureCode{93}{12}% ] -\TMP@EnsureCode{94}{7}% ^ (superscript) -\TMP@EnsureCode{96}{12}% ` -\TMP@EnsureCode{126}{13}% ~ (active) -\edef\KVS@AtEnd{\KVS@AtEnd\noexpand\endinput} -% \end{macrocode} -% -% \subsection{Package loading} -% -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname RequirePackage\endcsname\relax - \def\TMP@RequirePackage#1[#2]{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname ver@#1.sty\endcsname\relax - \input #1.sty\relax - \fi - }% - \TMP@RequirePackage{infwarerr}[2007/09/09]% - \TMP@RequirePackage{etexcmds}[2010/01/28]% -\else - \RequirePackage{infwarerr}[2007/09/09]% - \RequirePackage{etexcmds}[2010/01/28]% -\fi -% \end{macrocode} -% -% \begin{macrocode} -\expandafter\ifx\csname toks@\endcsname\relax - \toksdef\toks@=0 % -\fi -% \end{macrocode} -% -% \subsection{Check for \eTeX} -% -% \cs{unexpanded}, \cs{ifcsname}, and \cs{unless} are used if found. -% \begin{macrocode} -\begingroup\expandafter\endgroup -\ifcase0\ifetex@unexpanded - \expandafter\ifx\csname ifcsname\endcsname\relax - \else - \expandafter\ifx\csname unless\endcsname\relax - \else - 1% - \fi - \fi - \fi - \catcode`\$=9 % ignore - \catcode`\&=14 % comment -\else % e-TeX - \catcode`\$=14 % comment - \catcode`\&=9 % ignore -\fi -% \end{macrocode} -% -% \subsection{Generic help macros} -% -% \begin{macro}{\KVS@Empty} -% \begin{macrocode} -\def\KVS@Empty{} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@FirstOfTwo} -% \begin{macrocode} -\long\def\KVS@FirstOfTwo#1#2{#1} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@SecondOfTwo} -% \begin{macrocode} -\long\def\KVS@SecondOfTwo#1#2{#2} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\KVS@IfEmpty} -% \begin{macrocode} -\long\def\KVS@IfEmpty#1{% -& \edef\KVS@Temp{\etex@unexpanded{#1}}% -$ \begingroup -$ \toks@{#1}% -$ \edef\KVS@Temp{\the\toks@}% -$ \expandafter\endgroup - \ifx\KVS@Temp\KVS@Empty - \expandafter\KVS@FirstOfTwo - \else - \expandafter\KVS@SecondOfTwo - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Normalizing} -% -% \begin{macro}{\kv@normalize} -% \begin{macrocode} -\long\def\kv@normalize#1{% - \begingroup - \toks@{,#1,}% - \KVS@Comma - \KVS@SpaceComma - \KVS@CommaSpace - \KVS@CommaComma - \KVS@Equals - \KVS@SpaceEquals - \KVS@EqualsSpace - \xdef\KVS@Global{\the\toks@}% - \endgroup - \let\kv@list\KVS@Global -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\comma@normalize} -% \begin{macrocode} -\def\comma@normalize#1{% - \begingroup - \toks@{,#1,}% - \KVS@Comma - \KVS@SpaceComma - \KVS@CommaSpace - \KVS@CommaComma - \xdef\KVS@Global{\the\toks@}% - \endgroup - \let\comma@list\KVS@Global -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@Comma} -% Converts active commas into comma with catcode other. -% Also adds a comma at the end to protect the last value -% for next cleanup steps. -% \begin{macrocode} -\begingroup - \lccode`\,=`\,% - \lccode`\~=`\,% -\lowercase{\endgroup - \def\KVS@Comma{% - \toks@\expandafter{\expandafter}\expandafter - \KVS@@Comma\the\toks@~\KVS@Nil - }% - \long\def\KVS@@Comma#1~#2\KVS@Nil{% - \toks@\expandafter{\the\toks@#1}% - \KVS@IfEmpty{#2}{% - }{% - \KVS@@Comma,#2\KVS@Nil - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@SpaceComma} -% Removes spaces before the comma, may add commas at the end. -% \begin{macrocode} -\def\KVS@SpaceComma#1{% - \def\KVS@SpaceComma{% - \expandafter\KVS@@SpaceComma\the\toks@#1,\KVS@Nil - }% -} -\KVS@SpaceComma{ } -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@@SpaceComma} -% \begin{macrocode} -\long\def\KVS@@SpaceComma#1 ,#2\KVS@Nil{% - \KVS@IfEmpty{#2}{% - \toks@{#1}% - }{% - \KVS@@SpaceComma#1,#2\KVS@Nil - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@CommaSpace} -% Removes spaces after the comma, may add commas at the end. -% \begin{macrocode} -\def\KVS@CommaSpace{% - \expandafter\KVS@@CommaSpace\the\toks@, \KVS@Nil -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@@CommaSpace} -% \begin{macrocode} -\long\def\KVS@@CommaSpace#1, #2\KVS@Nil{% - \KVS@IfEmpty{#2}{% - \toks@{#1}% - }{% - \KVS@@CommaSpace#1,#2\KVS@Nil - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@CommaComma} -% Replaces multiple commas by one comma. -% \begin{macrocode} -\def\KVS@CommaComma{% - \expandafter\KVS@@CommaComma\the\toks@,\KVS@Nil -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@@CommaComma} -% \begin{macrocode} -\long\def\KVS@@CommaComma#1,,#2\KVS@Nil{% - \KVS@IfEmpty{#2}{% - \toks@{#1,}% (!) - }{% - \KVS@@CommaComma#1,#2\KVS@Nil - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\KVS@Equals} -% Converts active equals signs into catcode other characters. -% \begin{macrocode} -\begingroup - \lccode`\==`\=% - \lccode`\~=`\=% -\lowercase{\endgroup - \def\KVS@Equals{% - \toks@\expandafter{\expandafter}\expandafter - \KVS@@Equals\the\toks@~\KVS@Nil - }% - \long\def\KVS@@Equals#1~#2\KVS@Nil{% - \edef\KVS@Temp{\the\toks@}% - \ifx\KVS@Temp\KVS@Empty - \expandafter\KVS@FirstOfTwo - \else - \expandafter\KVS@SecondOfTwo - \fi - {% - \toks@{#1}% - }{% - \toks@\expandafter{\the\toks@=#1}% - }% - \KVS@IfEmpty{#2}{% - }{% - \KVS@@Equals#2\KVS@Nil - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@SpaceEquals} -% Removes spaces before the equals sign. -% \begin{macrocode} -\def\KVS@SpaceEquals#1{% - \def\KVS@SpaceEquals{% - \expandafter\KVS@@SpaceEquals\the\toks@#1=\KVS@Nil - }% -} -\KVS@SpaceEquals{ } -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@@SpaceEquals} -% \begin{macrocode} -\long\def\KVS@@SpaceEquals#1 =#2\KVS@Nil{% - \KVS@IfEmpty{#2}{% - \toks@{#1}% - }{% - \KVS@@SpaceEquals#1=#2\KVS@Nil - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@EqualsSpace} -% Removes spaces after the equals sign. -% \begin{macrocode} -\def\KVS@EqualsSpace{% - \expandafter\KVS@@EqualsSpace\the\toks@= \KVS@Nil -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@@EqualsSpace} -% \begin{macrocode} -\long\def\KVS@@EqualsSpace#1= #2\KVS@Nil{% - \KVS@IfEmpty{#2}{% - \toks@{#1}% - }{% - \KVS@@EqualsSpace#1=#2\KVS@Nil - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Parsing key value lists} -% -% \begin{macro}{\kv@parse} -% Normalizes and parses the key value list. Also sets \cs{kv@list}. -% \begin{macrocode} -\long\def\kv@parse#1{% - \kv@normalize{#1}% - \expandafter\kv@parse@normalized\expandafter{\kv@list}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\kv@parse@normalized} -% |#1|: key value list\\ -% |#2|: processor -% \begin{macrocode} -\long\def\kv@parse@normalized#1#2{% - \KVS@Parse#1,\KVS@Nil{#2}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@Parse} -% |#1,#2|: key value list\\ -% |#3|: processor -% \begin{macrocode} -\long\def\KVS@Parse#1,#2\KVS@Nil#3{% - \KVS@IfEmpty{#1}{% - }{% - \KVS@Process#1=\KVS@Nil{#3}% - }% - \KVS@MaybeBreak - \KVS@IfEmpty{#2}{% - }{% - \KVS@Parse#2\KVS@Nil{#3}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@Process} -% |#1|: key\\ -% |#2|: value, |=|\\ -% |#3|: processor -% \begin{macrocode} -\long\def\KVS@Process#1=#2\KVS@Nil#3{% - \let\KVS@MaybeBreak\relax - \def\kv@key{#1}% - \KVS@IfEmpty{#2}{% - \let\kv@value\relax - #3{#1}{}% - }{% - \KVS@@Process{#1}#2\KVS@Nil{#3}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@@Process} -% |#1|: key\\ -% |#2|: value\\ -% |#3|: processor -% \begin{macrocode} -\long\def\KVS@@Process#1#2=\KVS@Nil#3{% -& \edef\kv@value{\etex@unexpanded{#2}}% -$ \begingroup -$ \toks@{#2}% -$ \xdef\KVS@Global{\the\toks@}% -$ \endgroup -$ \let\kv@value\KVS@Global - #3{#1}{#2}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@MaybeBreak} -% \begin{macrocode} -\let\KVS@MaybeBreak\relax -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@break} -% \begin{macrocode} -\def\KVS@break#1#2#3#4{% - \let\KVS@MaybeBreak\relax -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\kv@break} -% \begin{macrocode} -\def\kv@break{% - \let\KVS@MaybeBreak\KVS@break -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Parsing comma lists} -% -% \begin{macro}{\comma@parse} -% Normalizes and parses the key value list. Also sets \cs{comma@list}. -% \begin{macrocode} -\def\comma@parse#1{% - \comma@normalize{#1}% - \expandafter\comma@parse@normalized\expandafter{\comma@list}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\comma@parse@normalized} -% |#1|: comma list\\ -% |#2|: processor -% \begin{macrocode} -\def\comma@parse@normalized#1#2{% - \KVS@CommaParse#1,\KVS@Nil{#2}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@CommaParse} -% |#1,#2|: comma list\\ -% |#3|: processor -% \begin{macrocode} -\def\KVS@CommaParse#1,#2\KVS@Nil#3{% - \KVS@IfEmpty{#1}{% - }{% - \def\comma@entry{#1}% - #3{#1}% - }% - \KVS@MaybeBreak - \KVS@IfEmpty{#2}{% - }{% - \KVS@CommaParse#2\KVS@Nil{#3}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\comma@break} -% \begin{macrocode} -\def\comma@break{% - \let\KVS@MaybeBreak\KVS@break -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Processing key value pairs} -% -% \begin{macro}{\kv@handled@false} -% The handler can call \cs{kv@handled@false} or -% \cs{kv@handled@true} so report failure or success. -% The default is success (compatibility for versions -% before 2011/10/18 v1.15). -% \begin{macrocode} -\def\kv@handled@false{% - \let\ifkv@handled@\iffalse -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\kv@handled@true} -% \begin{macrocode} -\def\kv@handled@true{% - \let\ifkv@handled@\iftrue -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ifkv@handled@} -% \begin{macrocode} -\kv@handled@true -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\kv@processor@default} -% \begin{macrocode} -\def\kv@processor@default#1#2{% - \begingroup - \csname @safe@activestrue\endcsname - \let\ifincsname\iftrue - \edef\KVS@temp{\endgroup - \noexpand\KVS@ProcessorDefault{#1}{#2}% - }% - \KVS@temp -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@ProcessorDefault} -% \begin{macrocode} -\long\def\KVS@ProcessorDefault#1#2#3{% - \def\kv@fam{#1}% -& \unless\ifcsname KV@#1@#2\endcsname -$ \begingroup\expandafter\expandafter\expandafter\endgroup -$ \expandafter\ifx\csname KV@#1@#2\endcsname\relax -& \unless\ifcsname KVS@#1@handler\endcsname -$ \begingroup\expandafter\expandafter\expandafter\endgroup -$ \expandafter\ifx\csname KVS@#1@handler\endcsname\relax - \kv@error@unknownkey{#1}{#2}% - \else - \kv@handled@true - \csname KVS@#1@handler\endcsname{#2}{#3}% - \relax - \ifkv@handled@ - \else - \kv@error@unknownkey{#1}{#2}% - \fi - \fi - \else - \ifx\kv@value\relax -& \unless\ifcsname KV@#1@#2@default\endcsname -$ \begingroup\expandafter\expandafter\expandafter\endgroup -$ \expandafter\ifx\csname KV@#1@#2@default\endcsname\relax - \kv@error@novalue{#1}{#2}% - \else - \csname KV@#1@#2@default\endcsname - \relax - \fi - \else - \csname KV@#1@#2\endcsname{#3}% - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\kv@processor@known} -% \begin{macrocode} -\def\kv@processor@known#1#2#3{% - \begingroup - \csname @safe@activestrue\endcsname - \let\ifincsname\iftrue - \edef\KVS@temp{\endgroup - \noexpand\KVS@ProcessorKnown{#1}\noexpand#2{#3}% - }% - \KVS@temp -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@ProcessorKnown} -% \begin{macrocode} -\long\def\KVS@ProcessorKnown#1#2#3#4{% - \def\kv@fam{#1}% -& \unless\ifcsname KV@#1@#3\endcsname -$ \begingroup\expandafter\expandafter\expandafter\endgroup -$ \expandafter\ifx\csname KV@#1@#3\endcsname\relax -& \unless\ifcsname KVS@#1@handler\endcsname -$ \begingroup\expandafter\expandafter\expandafter\endgroup -$ \expandafter\ifx\csname KVS@#1@handler\endcsname\relax - \KVS@AddUnhandled#2{#3}{#4}% - \else - \kv@handled@true - \csname KVS@#1@handler\endcsname{#3}{#4}% - \relax - \ifkv@handled@ - \else - \KVS@AddUnhandled#2{#3}{#4}% - \fi - \fi - \else - \ifx\kv@value\relax -& \unless\ifcsname KV@#1@#2@default\endcsname -$ \begingroup\expandafter\expandafter\expandafter\endgroup -$ \expandafter\ifx\csname KV@#1@#3@default\endcsname\relax - \kv@error@novalue{#1}{#3}% - \else - \csname KV@#1@#3@default\endcsname - \relax - \fi - \else - \csname KV@#1@#3\endcsname{#4}% - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@AddUnhandled} -% \begin{macrocode} -\long\def\KVS@AddUnhandled#1#2#3{% -& \edef#1{% -& \ifx#1\KVS@empty -& \else -& \etex@unexpanded{#1},% -& \fi -& \etex@unexpanded{{#2}={#3}}% -& }% -$ \begingroup -$ \ifx#1\KVS@empty -$ \toks@{{#2}={#3}}% -$ \else -$ \toks@\expandafter{#1,{#2}={#3}}% -$ \fi -$ \xdef\KVS@Global{\the\toks@}% -$ \endgroup -$ \let#1\KVS@Global -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\kv@set@family@handler} -% \begin{macrocode} -\long\def\kv@set@family@handler#1#2{% - \begingroup - \csname @safe@activestrue\endcsname - \let\ifincsname\iftrue - \expandafter\endgroup - \expandafter\def\csname KVS@#1@handler\endcsname##1##2{#2}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\kv@unset@family@handler} -% \begin{macrocode} -\long\def\kv@unset@family@handler#1#2{% - \begingroup - \csname @safe@activestrue\endcsname - \let\ifincsname\iftrue - \expandafter\endgroup - \expandafter\let\csname KVS@#1@handler\endcsname\@UnDeFiNeD -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Error handling} -% -% \begin{macro}{\kv@error@novalue} -% \begin{macrocode} -\def\kv@error@novalue{% - \kv@error@generic{No value specified for}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\kv@error@unknownkey} -% \begin{macrocode} -\def\kv@error@unknownkey{% - \kv@error@generic{Undefined}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\kv@error@generic} -% \begin{macrocode} -\def\kv@error@generic#1#2#3{% - \@PackageError{kvsetkeys}{% - #1 key `#3'% - }{% - The keyval family of the key `#3' is `#2'.\MessageBreak - The setting of the key is ignored because of the error.\MessageBreak - \MessageBreak - \@ehc - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Do it all} -% -% \begin{macro}{\kvsetkeys} -% \begin{macrocode} -\long\def\kvsetkeys#1#2{% - \kv@parse{#2}{\kv@processor@default{#1}}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\kvsetkeys@expandafter} -% \begin{macrocode} -\def\kvsetkeys@expandafter#1#2{% - \expandafter\kv@parse\expandafter{#2}{% - \kv@processor@default{#1}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\KVS@cmd} -% \begin{macrocode} -\def\KVS@cmd{0}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@cmd@inc} -% \begin{macrocode} -\def\KVS@cmd@inc{% -& \edef\KVS@cmd{\the\numexpr\KVS@cmd+1}% -$ \begingroup -$ \count255=\KVS@cmd\relax -$ \advance\count255 by 1\relax -$ \edef\x{\endgroup -$ \noexpand\def\noexpand\KVS@cmd{\number\count255}% -$ }% -$ \x -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@cmd@dec} -% \begin{macrocode} -\def\KVS@cmd@dec{% -& \edef\KVS@cmd{\the\numexpr\KVS@cmd-1}% -$ \begingroup -$ \count255=\KVS@cmd\relax -$ \advance\count255 by -1\relax -$ \edef\x{\endgroup -$ \noexpand\def\noexpand\KVS@cmd{\number\count255}% -$ }% -$ \x -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@empty} -% \begin{macrocode} -\def\KVS@empty{} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\kvsetknownkeys} -% \begin{macrocode} -\def\kvsetknownkeys{% - \expandafter - \KVS@setknownkeys\csname KVS@cmd\KVS@cmd\endcsname{}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\KVS@setknownkeys} -% \begin{macrocode} -\long\def\KVS@setknownkeys#1#2#3#4#5{% - \let#1\KVS@empty - \KVS@cmd@inc - #2\kv@parse#2{#5}{\kv@processor@known{#3}#1}% - \KVS@cmd@dec - \let#4=#1% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\kvsetknownkeys@expandafter} -% \begin{macrocode} -\def\kvsetknownkeys@expandafter{% - \expandafter - \KVS@setknownkeys - \csname KVS@cmd\KVS@cmd\endcsname\expandafter -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\KVS@AtEnd% -%</package> -% \end{macrocode} -%% \section{Installation} -% -% \subsection{Download} -% -% \paragraph{Package.} This package is available on -% CTAN\footnote{\CTANpkg{kvsetkeys}}: -% \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/kvsetkeys.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/kvsetkeys.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTANpkg{tds}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% -% \subsection{Package installation} -% -% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting -% \docstrip\ archive. The files are extracted by running the -% \xfile{.dtx} through \plainTeX: -% \begin{quote} -% \verb|tex kvsetkeys.dtx| -% \end{quote} -% -% \paragraph{TDS.} Now the different files must be moved into -% the different directories in your installation TDS tree -% (also known as \xfile{texmf} tree): -% \begin{quote} -% \def\t{^^A -% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% kvsetkeys.sty & tex/generic/oberdiek/kvsetkeys.sty\\ -% kvsetkeys.pdf & doc/latex/oberdiek/kvsetkeys.pdf\\ -% kvsetkeys-example.tex & doc/latex/oberdiek/kvsetkeys-example.tex\\ -% kvsetkeys.dtx & source/latex/oberdiek/kvsetkeys.dtx\\ -% \end{tabular}^^A -% }^^A -% \sbox0{\t}^^A -% \ifdim\wd0>\linewidth -% \begingroup -% \advance\linewidth by\leftmargin -% \advance\linewidth by\rightmargin -% \edef\x{\endgroup -% \def\noexpand\lw{\the\linewidth}^^A -% }\x -% \def\lwbox{^^A -% \leavevmode -% \hbox to \linewidth{^^A -% \kern-\leftmargin\relax -% \hss -% \usebox0 -% \hss -% \kern-\rightmargin\relax -% }^^A -% }^^A -% \ifdim\wd0>\lw -% \sbox0{\small\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\footnotesize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\scriptsize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\tiny\t}^^A -% \ifdim\wd0>\linewidth -% \lwbox -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \end{quote} -% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's -% TDS installing feature, then some files can already be in the right -% place, see the documentation of \docstrip. -% -% \subsection{Refresh file name databases} -% -% If your \TeX~distribution -% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh -% these. For example, \TeX\,Live\ users run \verb|texhash| or -% \verb|mktexlsr|. -% -% \subsection{Some details for the interested} -% -% \paragraph{Unpacking with \LaTeX.} -% The \xfile{.dtx} chooses its action depending on the format: -% \begin{description} -% \item[\plainTeX:] Run \docstrip\ and extract the files. -% \item[\LaTeX:] Generate the documentation. -% \end{description} -% If you insist on using \LaTeX\ for \docstrip\ (really, -% \docstrip\ does not need \LaTeX), then inform the autodetect routine -% about your intention: -% \begin{quote} -% \verb|latex \let\install=y\input{kvsetkeys.dtx}| -% \end{quote} -% Do not forget to quote the argument according to the demands -% of your shell. -% -% \paragraph{Generating the documentation.} -% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate -% the documentation. The process can be configured by the -% configuration file \xfile{ltxdoc.cfg}. For instance, put this -% line into this file, if you want to have A4 as paper format: -% \begin{quote} -% \verb|\PassOptionsToClass{a4paper}{article}| -% \end{quote} -% An example follows how to generate the -% documentation with pdf\LaTeX: -% \begin{quote} -%\begin{verbatim} -%pdflatex kvsetkeys.dtx -%makeindex -s gind.ist kvsetkeys.idx -%pdflatex kvsetkeys.dtx -%makeindex -s gind.ist kvsetkeys.idx -%pdflatex kvsetkeys.dtx -%\end{verbatim} -% \end{quote} -% -% \begin{thebibliography}{9} -% \bibitem{tb94wright} -% A guide to key-value methods, Joseph Wright, second draft for -% \href{https://www.tug.org/tugboat}{TUGBoat}, 2009-03-17. -% \url{https://www.texdev.net/uploads/2009/03/keyval.pdf} -% -% \bibitem{keyval} -% David Carlisle: -% \textit{The \xpackage{keyval} package}; -% 1999/03/16 v1.13; -% \CTANpkg{keyval}. -% -% \end{thebibliography} -% -% \begin{History} -% \begin{Version}{2006/03/06 v1.0} -% \item -% First version. -% \end{Version} -% \begin{Version}{2006/10/19 v1.1} -% \item -% Fix of \cs{kv@set@family@handler}. -% \item -% Example added. -% \end{Version} -% \begin{Version}{2007/09/09 v1.2} -% \item -% Using package \xpackage{infwarerr} for error messages. -% \item -% Catcode section rewritten. -% \end{Version} -% \begin{Version}{2007/09/29 v1.3} -% \item -% Normalizing and parsing of comma separated lists added. -% \item -% \cs{kv@normalize} rewritten. -% \item -% Robustness increased for normalizing and parsing, -% e.g. for values with unmatched conditionals. -% \item -% \eTeX\ is used if available. -% \item -% Tests added for normalizing and parsing. -% \end{Version} -% \begin{Version}{2009/07/19 v1.4} -% \item -% Bug fix for \cs{kv@normalize}: unwanted space removed (Florent Chervet). -% \end{Version} -% \begin{Version}{2009/07/30 v1.5} -% \item -% Documentation addition: recommendation for Joseph Wright's -% review article. -% \end{Version} -% \begin{Version}{2009/12/12 v1.6} -% \item -% Short info shortened. -% \end{Version} -% \begin{Version}{2009/12/22 v1.7} -% \item -% Internal optimization (\cs{KVS@CommaSpace}, \dots, \cs{KVS@EqualsSpace}). -% \end{Version} -% \begin{Version}{2010/01/28 v1.8} -% \item -% Compatibility to ini\TeX\ added. -% \end{Version} -% \begin{Version}{2010/03/01 v1.9} -% \item -% Support of \cs{par} inside values. -% \end{Version} -% \begin{Version}{2011/01/30 v1.10} -% \item -% Already loaded package files are not input in \hologo{plainTeX}. -% \end{Version} -% \begin{Version}{2011/03/03 v1.11} -% \item -% \cs{kv@break} and \cs{comma@break} added. -% \end{Version} -% \begin{Version}{2011/04/05 v1.12} -% \item -% Error message with recovery action in help message -% (request by GL). -% \end{Version} -% \begin{Version}{2011/04/07 v1.13} -% \item -% \cs{kv@processor@default} supports package \xpackage{babel}'s -% shorthands. -% \item -% \cs{kv@set@family@handler} with shorthand support. -% \end{Version} -% \begin{Version}{2011/06/15 v1.14} -% \item -% Some optimizations in token register uses (GL, HO). -% \end{Version} -% \begin{Version}{2011/10/18 v1.15} -% \item -% \cs{kv@processor@known} and \cs{kvsetknownkeys} added. -% \item -% \cs{kvsetkeys@expandafter} and \cs{kvsetknownkeys@expandafter} added. -% \item -% Family handler can report success or failure by \cs{kv@handled@true} -% or \cs{kv@handled@false}. -% \item -% \cs{kv@unset@family@handler} added. -% \end{Version} -% \begin{Version}{2012/04/25 v1.16} -% \item -% \cs{kv@processor@default} and \cs{kv@processor@known} define -% macro \cs{kv@fam} for convenience. -% \item -% Catcode section: Catcode setting for \texttt{+} added for \hologo{eTeX}. -% \end{Version} -% \begin{Version}{2016/05/16 v1.17} -% \item -% Documentation updates. -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput |