summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex')
-rw-r--r--Master/texmf-dist/doc/latex/skeyval/README445
-rw-r--r--Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke1.pdfbin126238 -> 126258 bytes
-rw-r--r--Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke1.tex166
-rw-r--r--Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke2.pdfbin136342 -> 136229 bytes
-rw-r--r--Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke2.tex68
-rw-r--r--Master/texmf-dist/doc/latex/skeyval/skeyval-testclass.cls51
-rw-r--r--Master/texmf-dist/doc/latex/skeyval/skeyval-testpkg.sty61
-rw-r--r--Master/texmf-dist/doc/latex/skeyval/skeyval-view-pokayoke1.pdfbin107744 -> 0 bytes
-rw-r--r--Master/texmf-dist/doc/latex/skeyval/skeyval-view-pokayoke1.tex139
9 files changed, 666 insertions, 264 deletions
diff --git a/Master/texmf-dist/doc/latex/skeyval/README b/Master/texmf-dist/doc/latex/skeyval/README
index 5a43e018146..00977c54e35 100644
--- a/Master/texmf-dist/doc/latex/skeyval/README
+++ b/Master/texmf-dist/doc/latex/skeyval/README
@@ -6,7 +6,7 @@ Ahmed Musa
VERSION
-Version 1.1a, October 16, 2012.
+Version 1.2, February 10, 2013.
LOCATION ON CTAN
@@ -14,7 +14,7 @@ macros/latex/contrib/skeyval
LICENSE
-Copyright (c) 2010-2012 Ahmed Musa
+Copyright (c) 2010-2013 Ahmed Musa
This software is author-maintained. Permission is granted to copy,
distribute and/or modify this software under the terms of the
@@ -60,19 +60,18 @@ The 's' in skeyval means 'skeleton keys' or 'master keys'.
The skeyval package provides commands for compactly defining and
initializing all types of key (ordinary, command, boolean, style, choice,
-etc). It attempts to combine the features of ltxkeys package (which has
-the syntax of the xkeyval package) and pgfkeys package. One of the powers
-of pgfkeys package lies in its use of handlers. But the way handlers
-are used in pgfkeys package does add to computational complexity and
-overheads. Family or key filtering in pgfkeys is particularly complex
-and inefficient. Nesting of family or key filtering is, in particular,
-not recommended.
+etc). It attempts to combine the features of xkeyval package and
+pgfkeys package. One of the powers of pgfkeys package lies in its use
+of handlers. But the way handlers are used in pgfkeys package does add
+to computational complexity and overheads. Family or key filtering in
+pgfkeys is particularly complex and inefficient. Nesting of family or
+key filtering is, in particular, not recommended.
In pgfkeys package, handlers come at the end of the key name, so that
if a key isn't defined, the system tests to find if the key has a
handler at its end. If a handler is found and defined, the handler's
callback (called 'code' by pgfkeys package) is executed on the
-current path.
+current path. The required search overhead isn't insignificant.
The skeyval package puts handlers at the beginning of the key
(or a set of keys) and uses the handler to process the key (or a set
@@ -81,12 +80,58 @@ complexity. Key processing, including filtering, can be nested
naturally and efficiently.
The skeyval package also maintains and, in fact, greatly extends the
-functionality and syntaxes of the ltxkeys package. Very few examples
-of the functionality of skeyval package are
+functionality and syntaxes of the xkeyval and ltxkeys packages.
-** The callbacks of keys can be readily modified using commands
- like \skvaddtocallback, \skvprependtocallback, \skvappendtocallback,
- or the handlers .prepend code, .append code, .add code.
+Some of the features of skeyval vs. xkeyval are as follows. All the
+features listed below could be incorporated in xkeyval package but
+at a great expense.
+
+* xkeyval's use of the rather expensive selective sanitization
+ scheme of Uwe Kern;
+
+* xkeyval strips three levels of outer braces in the values of keys;
+
+* the impossibility of parsing unbalanced conditionals in key values
+ while using xkeyval;
+
+* xkeyval requires a large payload for defining many keys in the
+ same family;
+
+* when using xkeyval, existing keys could be easily overridden
+ (there is nothing like \newcommand functionality);
+
+* key macros, once defined by xkeyval, are difficult to modify/patch;
+
+* key macros defined by xkeyval can't accept more than one argument;
+
+* xkeyval provides no machinery for deploying style (subject/observer)
+ keys;
+
+* xkeyval offers no direct tools for key-commands and key-environments;
+
+* xkeyval can't be loaded before \documentclass (eg, in the past the
+ fontspec package needed this feature);
+
+* skeyval offers 'list processor keys' (called 'listkeys').
+
+
+Very few examples of the functionality of skeyval package are given in
+the following.
+
+** Ordinary, command/store, boolean, toggle, and choice keys can be
+ defined and set. For example,
+
+ \skvordkeys[KV]{fam}{key1,key2}[default value]{%
+ \def\testcmd##1##2{#1+##1+##2}%
+ }
+ \skvoptionkeys[KV]{fam}{key1}
+ \skvnonoptionkeys[KV]{fam}{key2}
+
+ \skvchoicekeys[KV]{fam}[mp@]{key1,key2}[\val\nr]{%
+ center.do=\def\vala{#1},
+ right.do=\def\valb{#1},
+ left.do=\def\valc{#1}
+ }[center]{\def\x##1{#1*##1}}
** Apart from the usual keys in xkeyval and ltxkeys packages, it is
now possible to define a rather weird key like
@@ -112,6 +157,40 @@ of the functionality of skeyval package are
evaluate (\x) as (\pgfmathresult) using (\pgfmathparse{\x^10})
}
+** Default prefix can be set by
+
+ \skvsetdefaultprefix{<pref>}
+
+ For a fixed prefix, this can be used to avoid repeated entry of the
+ key prefix in many of the commands of the skeyval package. Note,
+ however, that the first '[]' in
+
+ \skvordkey[KV]{fam}{key1}[deafult value]{}
+
+ still can't be used for any other thing than the key prefix.
+
+ With
+
+ \skvsetdefaultprefix{myprefix}
+
+ we can do
+
+ \skvordkey{fam}{key1}[deafult1]{}
+ \skvcmdkey{fam}[mp@]{key2}[deafultx,defaulty]{%
+ \def\cmd##1{#1+#2+##1}%
+ }
+ \skvassignargs{fam}[.expanded]{key2}{#1,#2}
+
+ and much later
+
+ \def\valuex{valuex}
+ \def\valuey{valuey}
+ \skvsetkeys[myprefix]{fam}{key1=value1,key2={\valuex,\valuey}}
+
+** The callbacks of keys can be readily modified using commands
+ like \skvaddtocallback, \skvprependtocallback, \skvappendtocallback,
+ or the handlers .prepend code, .append code, .add code.
+
** Handlers
The skeyval package has many handlers. The handlers of
@@ -126,7 +205,7 @@ of the functionality of skeyval package are
introduced.
\skvappendstyles[KV]{fam}{key1,key2}{keya=.expanded{\vala},keyb=valb}
- [defaultof 1&2]{\def\y##1{#1*##1}}
+ [default of key1&2]{\def\y##1{#1*##1}}
Here the subjects are key1 and key2, while the observers are keya and
keyb. For now, the only thing the subject does is to set the given values
@@ -146,12 +225,13 @@ of the functionality of skeyval package are
\skvassignargs[KV1,KV2]{fam1,fam2}[x1]{keya,keyb}{#1/#2}
\skvsetkeys[KV1]{fam2}{keya=vala/valb}
- 'x1' here means expand argument once at setting keys.
+ 'x1' here means 'expand argument once at setting keys'.
+
+** \directkeys command:
\directkeys{%
.exec code=\def\avalue{a+b},
- .prefixes={KV1,KV2},
- .families={fam1,fam2},
+ .paths={KV1/fam1,KV1/fam2,KV2/fam1,KV2/fam2},
.holder prefix=mp@,
.initialize keys after define,
.define keys={
@@ -175,7 +255,7 @@ of the functionality of skeyval package are
\directkeys{
.default prefix=KV,
% The prefix for 'famx' will be 'KV'.
- .paths={KV3/fam3,famx},
+ .paths={KV3/fam3,KV3/famx},
.new keys={
.initialize keys after define=false,
.ord/keya/defa/\def\ya##1{#1*##1*#2},
@@ -207,7 +287,7 @@ of the functionality of skeyval package are
.prepend code={
keyb=\def\pre##1{#1+##1},
},
- .styles{
+ .slots{
key1/keya=value1,
key2/keyb=value2
},
@@ -219,6 +299,26 @@ of the functionality of skeyval package are
},
}
+** Handlers and letting handlers
+
+ The skeyval has many handlers and many tools for creating handlers.
+ A full listing of handlers and their meaning will be provided in
+ the user manual.
+
+ .define handlers, .define handler
+ .new handlers, .new handler
+ .new reserved handlers, .new reserved handler,
+ .define reserved handlers, .define reserved handler
+ .define narg handler,.define narg handlers
+ .new narg handler,.new narg handlers
+ .new reserved narg handler,.new reserved narg handlers,
+ .define reserved narg handler,.define reserved narg handlers
+ .handlers let, .handler let
+ .handlers let*, .handler let*, .force handler let
+ .handlers let reserved, .handler let reserved
+ .reserve handlers
+
+
** Prepending and appending to key names and callbacks at
definition time:
@@ -237,16 +337,15 @@ of the functionality of skeyval package are
** Several new features are introduced by the skeyval package. For
- example, we now have 'style' and 'link' keys in the context of
- ltxkeys syntax. For example, to link keys via .link or .style
- handler:
+ example, we now have 'slot' and 'link' keys. For example, to link
+ keys via .link or .slot handler, we can do:
\directkeys{%
.link={key1, key2}/keya,
.link={key3, key4}/{keya, keyb},
- .append style expand twice={key3, key4}/keyf=\valuea,
- .prepend style expanded={key5, key6}/{keyc=#1, keyd=#1},
- .prepend style={key7, key8}/{keyd=#1, keye=#1},
+ .append slot expand twice={key3, key4}/keyf=\valuea,
+ .prepend slot expanded={key5, key6}/{keyc=#1, keyd=#1},
+ .prepend slot={key7, key8}/{keyd=#1, keye=#1},
.allowed values expanded=keye/{
center.do=\def\curralign##1{\hfil##1\hfil},
right.do=\def\curralign##1{\hfill##1},
@@ -314,8 +413,12 @@ of the functionality of skeyval package are
** Keys can be 'made', as in
\skvmakekeys[
- .prefix=KVA, .families={fam1,fam2}, .holder prefix=mp@,
- .all are new, .define in all families, .initialize after define
+ .prefix=KVA,
+ .families={fam1,fam2},
+ .holder prefix=mp@,
+ .all are new,
+ .define in all families,
+ .initialize after define
]{%
.ord/{keya,keyb}/{default-a},
.arg/keyb/{#1+#2},
@@ -360,7 +463,7 @@ of the functionality of skeyval package are
\fi
}
\newcommand*\drawcoloredarrows[1]{%
- \foreacfox {#1}{%
+ \foreachfox {#1}{%
\draw[\usecolor{##1},-stealth] (0,-##1)--(2,-##1);
}
}
@@ -370,7 +473,184 @@ of the functionality of skeyval package are
\end{tikzpicture}
\end{document}
-** Keys defined in families can be viewed in files using the package
+** Arguments of keys:
+
+ Argument of keys can be prescribed
+
+ 1. Within the key's callback by using the pointers
+
+ .arg, .arg unexpanded, .arg expand once, .arg expand twice,
+ .arg expanded.
+
+ Example:
+
+ \def\somemethod#1#2{%
+ \begingroup
+ \color{#1}%
+ Using \ifskvnovalue default\else user \fi value of `\skvcurrentkey'.
+ \endgraf
+ Argument-2 of key: #2%
+ \endgroup
+ }
+ % Test arguments given inside the callback:
+ \skvcmdkeys[KV]{fam}{keya}[red/default]{%
+ .arg expanded{#1/#2}%
+ \somemethod{#1}{#2}%
+ }
+ \begin{document}
+ \def\aval{blue/Some stuff}
+ \skvsetkeys[KV]{fam}{keya=\aval}
+ \end{document}
+
+ 2. By calling the command \skvassignargs.
+
+ 3. By using the following handlers within \directkeys or within
+ \skvdefinekeys
+
+ .arg, .arg unexpanded, .arg expand once, .arg expand twice,
+ .arg expanded
+
+
+** Listkeys
+
+ List processor keys. The key's value is considered a csv list
+ and each of its element is used as the argument of the key's callback.
+ The user of a listkey doesn't have to define his own list processor,
+ or define one key for each list item. The list separator can be
+ arbitrary; it can be specified in the key's callback as the
+ argument of the dummy commands \listsep and \listparser. The default
+ list separator is comma (,).
+
+ \makeatletter
+ \def\somemethod#1#2{%
+ \begingroup
+ \color{#1}%
+ \ifskvnovalue
+ \ifnum\skvlistcount=\@ne
+ \endgraf
+ Using default value of `\skvcurrentkey':
+ \fi
+ \else
+ \ifnum\skvlistcount=\@ne
+ \endgraf
+ Using user value of `\skvcurrentkey':
+ \fi
+ \fi
+ \endgroup
+ \endgraf
+ Processing item no. \skvlistcount: #2%
+ }
+
+ % Use comma (,), the default list separator, as the list
+ % separator for keya and keyb:
+ \skvlistkeys[KV]{fam}{keya,keyb}[default1,default2]{%
+ \somemethod{blue}{#1}%
+ % Process only four (4) items of the list/value for keya and keyb:
+ \ifnum\skvlistcount=4\relax
+ \skvstopprocessinglistkey
+ \fi
+ }
+ %\skvshowcs{KV/fam/keya.@cbk}
+
+ % Use semicolon (;) as the list separator for keyc and keyd:
+ \skvlistkeys[KV]{fam}{keyc,keyd}[default1;default2]{%
+ % The next line gives error, as expected, since a list key
+ % can't have an assigned argument that isn't simple.
+ % .arg{#1,#2}%
+ \listsep{;}\somemethod{red}{#1}%
+ }
+ \makeatother
+
+ \begin{document}
+ \parindent0pt
+ % No values for keya and keyb; use their default values:
+ \skvsetkeys[KV]{fam}{keya,keyb}
+ \par\bigskip
+ \skvsetkeys[KV]{fam}{%
+ keya={item1A,item1B,item1C,item1D,item1E,item1F},
+ keyb={item2A,item2B,item2C,item2D,item2E,item2F}
+ }
+ \par\bigskip
+ % Set keyc and keyd with their default values:
+ \skvsetkeys[KV]{fam}{keyc,keyd}
+ \par\bigskip
+ \skvsetkeys[KV]{fam}{%
+ keyc={item1A;item1B;item1C;item1D},
+ keyd={item2A;item2B;item2C;item2D}
+ }
+ \end{document}
+
+** Make any key a listkeys at key-setting time
+
+ You can use the pointers '.process list' on any key's value at
+ key-setting time to temporarily turn that key into a listkey.
+ Its current value will be processed as a list, ie, the key's
+ callback will be applied to every element of the current value.
+ This scheme is costlier than defining the key as a listkey,
+ using \skvlistkey, but it is more versatile. This allows any
+ key to accept and process a value that is a list, irrespective
+ of its argument pattern.
+
+ Example 1:
+
+ \skvordkeys[KV]{fam}{key1,key2}[default]{\def\xx##1{##1*#1}}
+ \skvsetkeys[KV]{fam}{%
+ key1=val1,key2=.process list{val2a,val2b}
+ }
+
+ Example 2:
+
+ \skvordkeys[KV]{fam}{key1,key2}[default]{%
+ .arg expanded{#1/#2}%
+ \def\x##1{##1*#1*#2}%
+ }
+ \def\aval{val1a/val1b}
+ \def\bval{val2a/val2b,val2c/val2d}
+ \skvsetkeys[KV]{fam}{%
+ % Because of '.arg expanded' in the key's callback, \aval
+ % will be expanded at setting keys:
+ key1=\aval,
+ % \bval will be expanded before its content is processed
+ % as a list. Because of '.arg expanded' in the key's callback,
+ % each element in \bval will be expanded at setting keys:
+ key2=.expand once process list{\bval}
+ }
+
+ Example 3:
+
+ \skvordkeys[KV]{fam}{key1}[default]{\def\x##1{##1*#1}}
+ \def\aval{val1a,val1b,val1c,val1d}
+ \def\bval{\aval}
+ \def\cval{\bval}
+ \skvsetkeys[KV]{fam}{%
+ key1=.expand once process list{\aval},
+ key1=.expand twice process list{\bval},
+ key1=.expand process list{\cval}
+ }
+
+
+** Disabling keys:
+
+ Message type to be issued when a disabled key is called:
+
+ \skvmessagetypefordisabledkey{<message type>}
+
+ <message type> can be 'warning', 'error', or 'nothing'. The default is
+ 'warning'.
+
+ The key(s) may be disabled long before \skvmessagetypefordisabledkey
+ is called.
+
+ Disabling keys locally:
+
+ \skvdisablekeys[<pref>]{<fam>}{<key list>}
+
+ Disabling keys globally:
+
+ \skvgdisablekeys[<pref>]{<fam>}{<key list>}
+
+
+** Keys defined in families can be 'viewed' in files using the package
'skeyval-view'. The functionality of 'skeyval-view' is greater than
that of xkeyval-view package.
@@ -383,5 +663,106 @@ of the functionality of skeyval package are
module. It is a generalization of PGF's \foreach macro for
arbitrary parsers and list separators, including active parsers.
+** For a package 'foobar', you can access its options by
+
+ \csname opt@foobar.sty\endcsname
+
+ To get the options that were actually found/defined and instantiated
+ during the processing of options, the skeyval package offers
+ \skvpackagelist and '.poxkeys' (processed options).
+
+ If 'option1' and 'option2' (but not 'option3') are recognized
+ options of foobar.sty, then after
+
+ \usepackage[option1,option2,option3]{foobar}
+
+ you can issue
+
+ \show\skvpackagelist -> foobar.sty{option1,option2}
+
+ \expandafter\show\csname foobar.sty.poxkeys\endcsname
+ -> option1, option2
+
+** Key filtering
+
+ The handlers for key filtering are
+
+ .prefix, .change prefix, .family, .change family, .families,
+ .change families, .add family, .add families, .ignore family,
+ .ignore families, .restore family, .restore families, .paths,
+ .change path, .change paths, .add paths, .ignore paths, .restore paths,
+ .ignore keys, .restore keys
+
+ \newcommand{\storecontent}{}
+ \newcommand{\usecontent}{%
+ \ifx\storecontent\@empty
+ \@@warning{\noexpand\storecontent is empty}%
+ \else
+ \storecontent
+ \fi
+ }
+ \directkeys{%
+ % Define keys in two families:
+ .families={family1,family2},
+ .define ordinary keys={
+ store//\skvappendtomacro\storecontent{#1},
+ remove//\skvpatchcmd\storecontent{#1}{}{}{
+ \@@warning{No token '\detokenize{#1}' in command \string\storecontent}
+ }
+ }
+ }
+ \def\savpar{\par}
+ \def\bigvskip{\par\bigskip}
+ \def\showfam{Family: \skvcurrentfamily\savpar}
+
+ \begin{document}
+ \directkeys{%
+ % Set keys in only family1:
+ .family=family1,
+ .set keys={
+ store={\showfam first test\bigvskip},
+ store={\showfam second test\bigvskip}
+ },
+ .exec code=\usecontent{\color{red}\savpar\hrule\bigvskip},
+ % Set keys in only family2:
+ .family=family2,
+ .set keys={
+ remove={\showfam first test\bigvskip},
+ remove={\showfam second test\bigvskip},
+ store={\showfam third test\bigvskip},
+ store={\showfam fourth test\bigvskip}
+ },
+ .exec code=\usecontent
+ }
+ \end{document}
+
+** Inheritance of keys
+
+ There are \skvkeyslet with the syntax
+
+ \skvkeyslet[<pref>]{<family>}{<list>}
+ <list> -> {<newkey1>,<newkey2>,...,<newkey-n>}={<oldkey>}
+
+ and the handler .inherit.
+
+ \directkeys{
+ .prefix=KV,
+ .family=fam,
+ .define ordinary keys={
+ key1/def1/\def\cmd##1{#1*##1},
+ key2/def2
+ },
+ .inherit={
+ {key3,key4}={key1},
+ }
+ }
+ \skvshowcs{KV/fam/key3.@cbk}
+
+** Defining and setting keys on fixed prefix and family
+
+ \skvsetprefix{KV}
+ \skvsetfamily{fam}
+ \skvdefineordkey{key1}[def1]{\def\cmd##1{#1*##1}}
+ \skvprocesskeys{key1=value1}
-% End of readme file \ No newline at end of file
+% End of readme file of skeyval package.
diff --git a/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke1.pdf b/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke1.pdf
index aad9d8e117d..b38b077fa0a 100644
--- a/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke1.pdf
+++ b/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke1.tex b/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke1.tex
index 2be16f1aa95..ed79d37585d 100644
--- a/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke1.tex
+++ b/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke1.tex
@@ -12,12 +12,9 @@
watermarkcolor=brown!80!yellow
]{skeyval-testclass}
-%\show\@unusedoptionlist
-
-\skvifpackageloaded{xcolor}{}{\usepackage[dvipsname]{xcolor}}
+\skvifpackageloadedTF{xcolor}{}{\usepackage[dvipsname]{xcolor}}
\usepackage{lipsum}
-
% The command \cmdalign is just for illustrating how key values
% may be expanded at key setting time:
\def\cmdalign{justified}
@@ -29,14 +26,18 @@
unknown-option,
]{skeyval-testpkg}
-% Keys whose names are zapped internally:
-\skvzcmdkeys[KV]{fam}[mp@]{provide value,give value}[true]{}
+%+++++++++++ Keys whose names are zapped internally ++++++++++++++%
+
+\skvzcmdkeys[KV]{fam}[mp@]{provide value,give value}[some value]{}
\skvzboolkeys[KV]{fam}[mp@]{provide value,give value}[true]{}
-% Parenthesized keys are keys with names that have parentheses.
+%++++++++++++++++++++++ Parenthesized keys +++++++++++++++++++++++%
+
+% Parenthesized keys are keys with names that have parentheses
% The following is a key of 3 arguments. The default values are
-% \x, \y, and \numexpr\x*2.
-\skvpntkey[KV]{fam}{evaluate (?) as (?) using (?)}[\x\y{\numexpr\x*2}]{%
+% \x, \y, and \numexpr\x*2 - since there are 3 arguments.
+%
+\skvpntkey[KV]{fam}{evaluate (?) as (?) using (?)}[{\x}{\y}{\numexpr\x*2}]{%
\def\argone{#1}\def\argtwo{#2}\def\argthree{#3}%
% '\detokenize{\pgfmath}' won't work here!
\skvxifinTF{\relax\string\pgfmath}{\relax\detokenize{#3}}{%
@@ -47,6 +48,7 @@
}
% The above parenthesized key can be set as follows:
+%
\def\cmda{2}
\skvsetkeys[KV]{fam}{%
evaluate (\cmda) as (\cmdb) using (\pgfmathsetmacro\cmdb{\cmda*10})
@@ -56,29 +58,40 @@
\newcommand*\vgap{\endgraf\medskip}
\def\keycval{xx}
-%% +++++++++++++++ Examples of using \directkeys command +++++++++ %%
+%% +++++++++++++++ Examples of using \directkeys command ++++++++++%
% Note: When the value of a handler contains equality sign (=) or
% comma (,), it should be enclosed in braces.
+\directkeys*{%
+ % Defining new handlers that can't be overloaded:
+ .new reserved handlers={
+ {.x handler,.x handlers}={
+ \dirkeys@defhandlers{00}{#1}
+ },
+ }
+}
+
\directkeys*{
.exec=\skvtestcnt\z@,
.prefix = KV1,
.family = fam1,
.holder prefix = mp@,
.add paths={KV2/fam2,KV3/fam3},
- .ignore roots={KV2/fam2,KV3/fam3},
- .restore roots={KV2/fam2,KV3/fam3},
+ .ignore paths={KV2/fam2,KV3/fam3},
+ .restore paths={KV2/fam2,KV3/fam3},
.save initial values of keys,
.initialize keys after define=false,
.new keys = {
.ord/keya/{dfta,dftb}/
+ %\def\skvhp{my@}
\def\cmda##1{#1*##1*#2}\logsetting
- ,
+ ,
.arg/keya/{#1,#2},
+ % See argument of keyb below:
.cmd/keyb/{1cm,2cm}/
\edef\boxht{\the\dimexpr#1*2\relax}
- \edef\boxwd{\the\dimexpr#1*10\relax},
+ \edef\boxwd{\the\dimexpr#2*2\relax},
.choice/keyc/center/{right,left,center,justified},
.bool/keyd/true,
.cmd/keye/dfte/\def\cmde##1{##1#1},
@@ -102,66 +115,77 @@
.restore keys = keye,
.link={keye2/keye},
% Choices for keye can be declared directly:
- .estate pattern={keye,keye2}/{
+ .state pattern expanded={keye,keye2}/{
center.do=\def\curralign##1{\hfil##1\hfil},
right.do=\def\curralign##1{\hfill##1},
left.do=\def\curralign##1{##1\hfill},
justified.do=\let\curralign\@iden
},
- .exec code ={
+ .exec code={
\def\leftval{left}\def\rightval{right}
\def\rrightval{\rightval}
},
% key1 and key2 are undefined. They will be defined internally
% with the default values of keyc and keyd:
- .prepend style={
+ .prepend slots={
key1/{keyc=.expanded{\rightval}},key2/{keyd=false}
},
- .append style={
+ .append slots={
key1/{keye=right,keyf=valf}
},
% When key3 and key4 are set, use their expanded values to set keye:
.elink={
{key3,key4}/keye
},
- .style expand twice={
+ .slot expand twice={
key5/{keyf=#1,keyg=#1}
},
.set keys={
key3=.expand once{\leftval},
key5=.expand twice{\rrightval}
},
- .prepend link={
- {key6,key7}/{keye,keyf},{key8,key9}/{keye,keyg}
+ .prepend links={
+ {key6,key7}/{keye,keyf},
+ {key8,key9}/{keye,keyg}
},
.exec code=\skvsetkeys[KV1]{fam1}{key6=center},
% Set keya and keyb on previously declared and the following paths.
% Enter known keys in \mysuccesslist. Try 14 families; stop when
% 12 families have been hit (ie, keys have been set in them
% successfully):
+ .exec code=\def\flukepaths{},
.search also set keys={
- .add prefixes={KV3,KV4},
- .add families={fam3,fam4},
+ .paths={KX/famx,KV1/fam1,KV3/fam3,KV3/fam4,KV4/fam3,KV4/fam4},
+ .ignore keys={keyc},
.try=14,
- .upper goal=12,
+ .min success=10,
+ .max success=12,
.success list=\mysuccesslist,
- .kv={keya={val1,val2},keyb={1cm,2cm}}
+ .if any path fails={%
+ \edef\flukepaths{\skvaddlist,\flukepaths\skvcurrentpath}
+ },
+ .if hits less than goal={\skvsetkeys[KV1]{fam1}{keyc=center}},
+ .kv={keya={val1,val2},keyb={1cm,2cm},keyc}
},
% .exec code={\show\mysuccesslist},
\directkeys*{
.exec=\skvtestcnt\z@\def\mysuccesslist{},
- .paths={KUA/fam1,KUB/fam2},
- .define keys={
- .ord/{keya,keyb,keyc}/.na/
+ .paths={KUA/fam1,KUA/fam2,KUB/fam1,KUB/fam2},
+ .define ordinary keys={
+ {keya,keyb,keyc}/.na/
\def\y##1{#1*##1}
\typeout{***}\logsetting
+ \skvsetkeys[KV1]{fam1}{keyc=center}
,
}
},
% '.try set keys' works independent of previously declared paths:
.try set keys={
- .prefixes={KUA,KUB,KUC},
- .families={fam1,fam2,fam3,fam4},
+ .paths={
+ KUA/fam1,KUA/fam2,KUA/fam3,KUA/fam4,
+ KUB/fam1,KUB/fam2,KUB/fam3,KUB/fam4,
+ KUC/fam1,KUC/fam2,KUC/fam3,KUC/fam4
+ },
.try=8,
.upper goal=4,
.lower goal=2,
@@ -169,10 +193,10 @@
.success list=\mysuccesslist,
.kv={keya=vala,keyb=valb,keyc=valc}
},
-% .exec code={\show\mysuccesslist},
+%.exec code={\show\mysuccesslist},
}
-\dirkeys*{
+\directkeys*{
.exec=\skvtestcnt\z@\def\mysuccesslist{},
.paths={KUA/fam1,KUB/fam2},
.hp=mp@,
@@ -184,18 +208,17 @@
% keya has no default but has a complex callback:
.ord/keya/.na/{
\skvtestcnt\z@\def\mysuccesslistb{}
- \dirkeys{
+ \directkeys{
.path={KVX/famx},
- .sa set keys={%
- .prefixes={KUA,KUB},
- .families={fam1,fam2},
+ .search also set keys={%
+ .paths={KUA/fam1,KUA/fam2,KUB/fam1,KUB/fam2},
.try=8,
.upper goal=4,
.lower goal=1,
.success list=\mysuccesslistb,
.kv={keyb=valb}
},
-% .exec code=\show\mysuccesslistb,
+% .exec code=\show\mysuccesslistb,
}
}
,
@@ -211,8 +234,10 @@
}/.na/\@@warning{Invalid value '\detokenize{#1}' for keye2},
},
.try set keys={%
- .prefixes={KUA,KUB},
- .families={fam1,fam2,fam3,fam4},
+ .paths={
+ KUA/fam1,KUA/fam2,KUA/fam3,KUA/fam4,
+ KUB/fam1,KUB/fam2,KUB/fam3,KUB/fam4
+ },
.try=1,
.upper goal=1,
.lower goal=1,
@@ -226,7 +251,6 @@
\makeatother
\begin{document}
-
\title{The \texttt{\textcolor{blue}{skeyval}} Package\\[1ex]
Version 1.1a\\[1ex]
\textsf{Test document 1}}
@@ -251,7 +275,6 @@ return to their own country.
\hfill{\small Hieronymus Hornschuch (1608)}\endgraf
\end{\mpfalign}
-
\begingroup
\par\bigskip
\noindent
@@ -356,10 +379,21 @@ on their deeds.
\lipsum[1]
\end{collectbody}
-
\end{document}
+%%+++++++++++++++++++++ Assigning arguments to keys +++++++++++++++++%%
+
+\skvsetdefaultprefix{myprefix}
+\skvordkey{fam}{key1}[deafult1]{}
+\skvcmdkey{fam}[mp@]{key2}[deafultx,defaulty]{%
+ \def\cmd##1{#1+#2+##1}%
+}
+\skvassignargs{fam}[.expanded]{key2}{#1,#2}
+\def\valuex{valuex}
+\def\valuey{valuey}
+\skvsetkeys[myprefix]{fam}{key1=value1,key2={\valuex,\valuey}}
+
%%+++++++++++++++++++++ Examples of \skvmakekeys +++++++++++++++++++%%
\skvmakekeys[
@@ -481,6 +515,52 @@ on their deeds.
}
\makeatother
-% End of file skeyval-pokayoke1.tex
+%++++++++++++++++++++++++ \ifcases ++++++++++++++++++++++++++++++%
+\skvifcases b\then
+ case{a}{\def\x{do a}}
+ case{b}{\def\x{do b}}
+ case{c}{\def\x{do c}}
+ % default{\def\x{no match}}
+\fi
+\skvifcasse{x}
+ case{a}{\def\x{do a}}
+ case{b}{\def\x{do b}}
+ case{c}{\def\x{do c}}
+\elsedo
+ \def\x{no match}
+\endif
+
+\skvifcasse{x}
+ case{a}{\def\x{do a}}
+ case{b}{\def\x{do b}}
+ case{c}{\def\x{do c}}
+%\elsedo
+% \def\x{no match}
+\endif
+
+%++++++++++++ Processing a key's value as a comma list +++++++++++%
+
+\skvordkeys[KV]{fam}{key1,key2}[default]{%
+ .arg{#1/#2}%
+ \def\x##1{##1*#1*#2}%
+}
+\def\aval{val1a/val1b}
+\def\bval{val2a/val2b,val2c/val2d}
+\skvsetkeys[KV]{fam}{%
+ key1=\aval,
+ key2=.eprocess list{\bval}
+}
+
+\skvordkeys[KV]{fam}{key1}[default]{\def\x##1{##1*#1}}
+\def\aval{val1a,val1b,val1c,val1d}
+\def\bval{\aval}
+\def\cval{\bval}
+\skvsetkeys[KV]{fam}{%
+ key1=.expand once process list{\aval},
+ key1=.expand twice process list{\bval},
+ key1=.expand process list{\cval}
+}
+
+% End of file skeyval-pokayoke1.tex
diff --git a/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke2.pdf b/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke2.pdf
index 7e995aab364..8f1cda84161 100644
--- a/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke2.pdf
+++ b/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke2.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke2.tex b/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke2.tex
index 57195061611..b720169ebbe 100644
--- a/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke2.tex
+++ b/Master/texmf-dist/doc/latex/skeyval/skeyval-pokayoke2.tex
@@ -1,8 +1,6 @@
\documentclass[
insertwatermark,watermarkcolor=blue!55,
- firstpagenumber=2,
- maketitlepage,
- unknown-key
+ firstpagenumber=2,maketitlepage,unknown-option
]{skeyval-testclass}
\setupskvtestclass{%
@@ -88,7 +86,7 @@
count in=\xc all \x satisfying \ifnum\x>5\fi
] in \alist {
\newforeach[
- parser={;},
+ parser={;}, subparser=:,
evaluate=\y as \ye using \numexpr\y*10
]
\y:\z in {1:red; 2:green; 3:blue; 4:brown; 5:purple} do {
@@ -103,4 +101,64 @@
\end{document}
-% End of file skeyval-pokayoke2.tex \ No newline at end of file
+
+%++ Pokayoke for \skvsetdirectkeysparser and \skvsetdefinekeysparser ++%
+
+\usepackage{tikz}
+\usetikzlibrary{shapes.geometric}
+\makeatletter
+\skvsetdirectkeysparser{;}
+\skvsetdefinekeysparser{;}
+\directkeys*{
+ .family=graph;
+ .holder prefix=cvt@;
+ .initialize keys after define;
+ .define keys={
+ .ord/num vertices,number of vertices,vertices/6/
+ \skvensureinteger{vertices}{#1}
+ \def\cvt@vertices{#1}
+ ;
+ .ord/radius,circle radius/2/\def\cvt@radius{#1};
+ .cmd/x,y/0
+ };
+ .preset keys={vertices,radius,x,y}
+}
+\newcommand*\drawgraph[1][]{%
+ \directkeys{
+ .family=graph;
+ .set keys={#1}
+ }
+ \pgfmathsetmacro\halfcircleradius{\cvt@radius/2}
+ \draw[blue] (\cvt@x,\cvt@y) circle (\halfcircleradius cm)
+ node [regular polygon, regular polygon sides=\cvt@vertices,
+ minimum size=\cvt@radius cm, draw=none, name={vertex set}]{};
+ \foreach \x in {1,...,\cvt@vertices}{
+ \node[draw,circle,inner sep=1pt,blue,fill=blue] at (vertex set.corner \x){};
+ }
+ \foreach \x in {1,...,\cvt@vertices}{
+ \foreach \y in {\x,...,\cvt@vertices}{
+ \draw[ultra thin, red] (vertex set.corner \x)--(vertex set.corner \y);
+ }
+ }
+}
+\makeatother
+\begin{document}
+\begin{tikzpicture}
+\drawgraph[number of vertices=6, circle radius=3, x=0, y=0]
+\drawgraph[number of vertices=8, circle radius=3, x=4, y=0]
+\end{tikzpicture}
+\par\bigskip
+\begin{tikzpicture}
+% Use default values of positions:
+\drawgraph[vertices=8, radius=3]
+% Use default values of vertices and radius:
+\drawgraph[x=4, y=0]
+\end{tikzpicture}
+\par\bigskip
+\begin{tikzpicture}
+% Use default values of all keys:
+\drawgraph
+\end{tikzpicture}
+\end{document}
+
+% End of file skeyval-pokayoke2.tex
diff --git a/Master/texmf-dist/doc/latex/skeyval/skeyval-testclass.cls b/Master/texmf-dist/doc/latex/skeyval/skeyval-testclass.cls
index c81c535c0ef..ecb846dc99b 100644
--- a/Master/texmf-dist/doc/latex/skeyval/skeyval-testclass.cls
+++ b/Master/texmf-dist/doc/latex/skeyval/skeyval-testclass.cls
@@ -1,5 +1,5 @@
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
-% This is file 'skeyval-testclass.cls', version 1.1a, 2012/10/16. %
+% This is file 'skeyval-testclass.cls', version 1.2, 2013/02/10. %
% %
% This package and accompanying files may be distributed and/or %
% modified under the conditions of the LaTeX Project Public License, %
@@ -23,11 +23,10 @@
% skeyval-pstkey.sty, skeyval-pstkey.tex, skeyval-testclass.cls, %
% and skeyval-testpkg.sty. %
% %
-% Copyright (c) 2010-2012 Ahmed Musa (amusa22@gmail.com). %
+% Copyright (c) 2010-2013 Ahmed Musa (amusa22@gmail.com). %
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
-\ProvidesClass{skeyval-testclass}
- [2012/10/16 v1.1a skeyval test class (AM)]
+\ProvidesClass{skeyval-testclass}[2013/02/10 v1.2 skeyval test class (AM)]
\NeedsTeXFormat{LaTeX2e}[2011/06/27]
\@ifpackageloaded{skeyval}{}{\RequirePackage{skeyval}}
\@ifpackageloaded{xcolor}{}{\RequirePackage{xcolor}}
@@ -80,9 +79,7 @@
\skvnewlet\skv@sav@footnote\footnote
\skvnewlet\skv@sav@thanks\thanks
\AtEndOfPackage{%
- \skvdisablekeys[SKVC]{title}{%
- insertwatermark
- }%
+ \skvdisablekeys[SKVC]{title}{insertwatermark}%
}
\AtBeginDocument{%
\def\footnote{\unskip\skv@sav@footnote}%
@@ -94,6 +91,11 @@
}
\let\skvcl@settitlepageno\@gobble
+% Example of option and nonoption keys:
+\skvordkeys[KV]{fam}{testkey1,testkey2}[value]{}
+\skvoptionkeys[KV]{fam}{testkey1}
+\skvnonoptionkeys[KV]{fam}{testkey2}
+
% LaTeX will zap spaces in key name, anyway. So our options don't have
% spaces within themselves.
@@ -107,6 +109,8 @@
.family=textemphasis,
.hp=xem@,
.new options={
+ .initialize keys after define,
+ .ord/{testkey1,testkey2,testkey3}/default,
.bool/useitalic/true,
.bool/usebold/true,
.bool/usecolor/true,
@@ -127,6 +131,8 @@
usecolour/usecolor,
colour/color,
},
+ .option keys = {testkey1},
+ .nonoption keys = {testkey2,testkey3},
% Modifying the article title:
.change family=title,
.hp=skvcl@,
@@ -183,32 +189,29 @@
.cmd/watermarkscale/5,
.cmd/watermarkcolor/gray!55,
},
- .styles={
+ .slots={
showdate/putdate=#1,
first-page-number/firstpagenumber=#1,
titlepage/maketitlepage=#1,
},
- % Options execution and processing:
- .families = {textemphasis,title},
- % Ececute the options in all the prevailing families. If any of
- % the options isn't found in at least one family, report error (ie,
- % don't save the key to the list of 'remaining keys'). Unknown options
- % should be flagged immediately.
- .execute options+={
- useitalic,usebold,usecolor,color,
- make-textemphasis-inactive=false,putdate,datefont,
- clearpage=false,pretitleskip,posttitleskip,
+ % Ececute the options in the current family. If any of the options
+ % isn't found, report error (ie, don't save the key to the list of
+ % 'remaining keys'). Unknown options should be flagged immediately.
+ % Use '.execute options+' or '.execute options in all families' to
+ % execute options in multiple families.
+ .execute options={
+ putdate,datefont,clearpage=false,pretitleskip,posttitleskip,
authorfont,titlefont,watermarkscale,firstpagenumber,
insertwatermark=false,watermarkxshift,watermarkyshift,
watermarktext,watermarkcolor,fontsize
},
- % Use '.mega process options*' or '.copy class options and process...':
-% .mega process options*={
-% prefix=SKVC,
-% families={textemphasis,title},
-% },
- .copy class options and process options in all families,
+ .families={textemphasis,title},
+ .process options in all families,
}
+%\show\skvcurrentpoxkeys
+
+% testkey1 is an option key: don't set it outside option list:
+% \skvsetkeys[SKVC]{textemphasis}{testkey1}
\skvrobustdef*\setupskvtestclass{%
\skvsetkeys*+[SKVC]{textemphasis,title}%
diff --git a/Master/texmf-dist/doc/latex/skeyval/skeyval-testpkg.sty b/Master/texmf-dist/doc/latex/skeyval/skeyval-testpkg.sty
index 30de37acd89..d2467bc9f1d 100644
--- a/Master/texmf-dist/doc/latex/skeyval/skeyval-testpkg.sty
+++ b/Master/texmf-dist/doc/latex/skeyval/skeyval-testpkg.sty
@@ -1,5 +1,5 @@
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
-% This is file 'skeyval-testpkg.sty', version 1.1a, 2012/10/16. %
+% This is file 'skeyval-testpkg.sty', version 1.2, 2013/02/10. %
% %
% This package and accompanying files may be distributed and/or %
% modified under the conditions of the LaTeX Project Public License, %
@@ -23,11 +23,10 @@
% skeyval-pstkey.sty, skeyval-pstkey.tex, skeyval-testclass.cls, %
% and skeyval-testpkg.sty. %
% %
-% Copyright (c) 2010-2012 Ahmed Musa (amusa22@gmail.com). %
+% Copyright (c) 2010-2013 Ahmed Musa (amusa22@gmail.com). %
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
-\ProvidesPackage{skeyval-testpkg}
- [2012/10/16 v1.1a skeyval test package 1 (AM)]
+\ProvidesPackage{skeyval-testpkg}[2013/02/10 v1.2 skeyval test package (AM)]
\NeedsTeXFormat{LaTeX2e}
\@ifpackageloaded{skeyval}{}{\RequirePackage{skeyval}}
\RequirePackage{graphicx}
@@ -41,7 +40,7 @@
% Declare options with default values that will be used when the options
% are called without user values.
%
-\skvDeclarePassedOptionsLoadPackage[SKVT]{testpkg}{%
+\skvdeclarepassedoptionsloadpackage[SKVT]{testpkg}{%
hyperref={colorlinks,breaklinks},xcolor=svgnames
}
@@ -72,8 +71,10 @@
\def\alignvalb{\alignval}
\def\stextstyle{\sffamily}
-\skvsetkeys[SKVT]{abrtext}{align=.expand twice{\alignvalb},
- text style=.expand once{\stextstyle},author,show author}
+\skvsetkeys[SKVT]{abrtext}{
+ align=.expand twice{\alignvalb},
+ text style=.expand once{\stextstyle},author,show author
+}
%%+++++++++++++++++++++++++++ Citations +++++++++++++++++++++++++++%%
@@ -266,13 +267,12 @@
.k handler={2}{\def\x##1{##1*#1*#2}},
.l handler={3}{\def\x##1{##1*#1*#2*#3}}
},
+ .reserve handlers={reservedx , reservedy},
.holder prefix = mp@,
.prefix = KV,
- .add prefixes = {KVA,KVD},
.families = {fam1, fam2},
.add family = {fam3},
.add families = {fama,famb,famc},
- .ignore prefixes = {KVA,KVD},
.ignore families = {fama,famb,famc},
.restore families = {fama,famb},
.restore paths = {KVA/fama,KVD/famc},
@@ -330,21 +330,21 @@
.set keys = {keya=vala},
},
.exec code = \def\keycval{true},
- % Prepend style keye to key1 and key2:
- .prepend style={key1/{keye=.expanded{\keycval}},key2/{keye=false}},
- % Multi-prepend styles:
- .prepend style={{key3,key4}/{keye=true,keyf=true},key5/{keye=false}},
- % Prepend style keyd to key6:
- .prepend style={key6/{keyd=right}},
- % Append styles keye and keyf to key7 and key8.
- % '.styles' and '.style' are equivalent to '.append styles'
- % and '.append style'.
- .append style={key7/{keye=true},key8/{keyf=false}},
+ % Prepend slot keye to key1 and key2:
+ .prepend slot={key1/{keye=.expanded{\keycval}},key2/{keye=false}},
+ % Multi-prepend slots:
+ .prepend slot={{key3,key4}/{keye=true,keyf=true},key5/{keye=false}},
+ % Prepend slot keyd to key6:
+ .prepend slot={key6/{keyd=right}},
+ % Append slots keye and keyf to key7 and key8.
+ % '.slots' and '.slot' are equivalent to '.append slots'
+ % and '.append slot'.
+ .append slot={key7/{keye=true},key8/{keyf=false}},
% The next two link keyb and keyc to key9. #1 here refers to the
% current value of key9. The same effect can be achieved directly
% via the '.link' handler:
- .prepend style={key9/{keyb=#1}},
- .append style={key9/{keyc=#1}},
+ .prepend slot={key9/{keyb=#1}},
+ .append slot={key9/{keyc=#1}},
.set keys = {key9=val9},
% Link keye and keyf to key10 and key11. The values of key10 and
% key11 are used to set keye and keyf. key10 and key11 are hence
@@ -432,4 +432,23 @@
\skvprocessoptions*+[SKVT]<abrtext,shadowbox,citation,testpkg>\relax
%\skvrestrictedprocessoptions*+[SKVT]<abrtext,shadowbox,citation,testpkg>\relax
+\skvcomment
+Here you could also use:
+
+\directkeys{
+ .mega process options*={
+ .prefix=SKVT,
+ .families={abrtext,shadowbox,citation,testpkg},
+ }
+}
+
+or
+
+\directkeys{
+ .prefix=SKVT,
+ .families={abrtext,shadowbox,citation,testpkg},
+ .copy class options and process options in all families,
+}
+\endcomment
+
\endinput
diff --git a/Master/texmf-dist/doc/latex/skeyval/skeyval-view-pokayoke1.pdf b/Master/texmf-dist/doc/latex/skeyval/skeyval-view-pokayoke1.pdf
deleted file mode 100644
index fc4c8014215..00000000000
--- a/Master/texmf-dist/doc/latex/skeyval/skeyval-view-pokayoke1.pdf
+++ /dev/null
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/skeyval/skeyval-view-pokayoke1.tex b/Master/texmf-dist/doc/latex/skeyval/skeyval-view-pokayoke1.tex
deleted file mode 100644
index 9ad80b2a5c5..00000000000
--- a/Master/texmf-dist/doc/latex/skeyval/skeyval-view-pokayoke1.tex
+++ /dev/null
@@ -1,139 +0,0 @@
-\documentclass{skeyval-testclass}
-\usepackage[xcolor-options=dvipsnames]{skeyval-view}
-\usetikzlibrary[topaths]
-
-\makeatletter
-
-\setupviewkeys{length of default=30}
-
-\skvdefinekeys[KV]{fam1}[vhp@]{%
- .initialize after define,
- .ord/{keya,keya2}/default-a,
- .cmd/keyb,
- .zcmd/key c/\def\cmdc##1{##1}/
- \edef\y{\detokenize\expandafter{\vhp@keyc}}\def\x##1{#1*key c*##1},
- % No default for keyd:
- .choice/keyd/.na
- /{center.do=\def\x##1{#1*##1},left.do={\def\ans{#1}},right}
- /\def\z##1{#1*##1}
- /\@warning{Invalid value for keyd},
- .bool/show shadow/true,
- .zbool/show center/true/\edef\cmd{\ifvhp@showcenter Yes\else No\fi},
- .ord/keye,
- .cmd/keyf,
-}
-%\show\y
-%\skvshowcs{KV@fam1@show center}
-%\show\cmd
-
-% Define some keys:
-\directkeys*{
- .prefix=KV,
- .family=fam2,
- .holder prefix=hp@,
- .initialize keys after define,
- .define keys={%
- .ord/keya,
- .ord/galaxy/Messier 51a/\def\constellation{Canes Venatici},
- .choice/planet/Earth/{Earth.do=\def\x##1{#1*##1},Mars,Jupiter},
- .bool/space travel/true,
- .cmd/astronaut/Yuri Gagarin/
- \edef\x{\ifx\hp@astronaut\@empty Neil Armstrong\else\hp@astronaut\fi},
- .ord/space observatory/Hubble Space Telescope/
- \def\father{Lyman Spitzer~(1914--1997)},
- },
-}
-
-\makeatother
-
-\begin{document}
-
-\title{The \texttt{\textcolor{blue}{skeyval-view}} Package\\[.25ex]
- Version 1.1a\\[1ex]
- \textsf{Test document}}
-\author{Ahmed Musa}
-\maketitle
-
-\skvviewkeys{%
- .show={
- family=fam1,
- color=blue
- },
- .show={
- families={fam1,fam2},
- only those with default=true,
- write to file=\jobname.skvv,
- show labels=true,
- show wlabels=true,
- },
- .show={
- family=fam1,
- only those with default=[none],
- show labels=true,
- color=cyan,
- },
- .show={
- families={fam1,fam2},
- only those without default=true,
- color=purple,
- },
- .show={
- family=fam2,
- columns={prefix,family,key type,default},
- color=teal
- },
- .show={
- only those in family=fam2,
- columns={family,type,default}
- },
- .show={
- only those in families={fam1,fam2},
- columns={prefix,family,type,default},
- color=magenta
- }
-}
-
-\newpage
-
-\skvtestcnt0\relax
-\skvrecurse
- \advance\skvtestcnt1\relax
- \vskip\baselineskip\noindent
- \textcolor{blue!\the\numexpr10*\skvtestcnt!red!%
- \the\numexpr100/\skvtestcnt}{%
- The play was a great success, but the audience was a disaster.
- \endgraf{\small Oscar Wilde, 1854--1900}
- }%
-\while
- \ifnum\skvtestcnt<8\relax
-\fi
-
-% Credit: Quintin Jean-Noël
-\newcount\mycount
-\begin{center}
-\begin{tikzpicture}[scale=.5,transform shape]
-\newforeach \nr in {1,...,8}{
- \mycount=\numexpr(\nr-1)*45\relax
- \node[draw,circle,inner sep=0.25cm] (N-\nr) at (\the\mycount:5.4cm) {};
-}
-\newforeach \nr in {9,...,16}{
- \mycount=\numexpr(\nr-1)*45+22\relax
- \node[draw,circle,inner sep=0.25cm] (N-\nr) at (\the\mycount:5.4cm) {};
-}
-\newforeach \nr in {1,...,15}{
- \mycount=\numexpr\nr+1\relax
- \newforeach \nra in {\the\mycount,...,16}{
- \path (N-\nr) edge[->,bend right=3] (N-\nra) edge[<-,bend left=3]
- (N-\nra);
- }
-}
-\end{tikzpicture}
-\end{center}
-
-
-\bigskip
-Find more information about the \textcolor{red}{\texttt{show shadow}} option on page~\pageref{KV/fam1/show shadow}.
-
-\end{document}
-
-% End of file skeyval-view-pokayoke1.tex \ No newline at end of file