% keyval2e.sty examples, version 0.0.2, August 2011

\documentclass{article}
\usepackage{keyval2e,color}
\makeatletter
\kve@definekeys[KV]{fam}[mp@]{%
  keyone/+/\ifstrcmpTF{#1}{+}{\def\userinput{#1}}{\def\userinput{not `+'}},
  keytwo/+,
  keythree/+,
  keyfour/+,
  keyfive/true/\ifmp@keyfive\def\x{keyfive is 'true'}\else
    \def\x{keyfive is 'false'}\fi,
  keysix/true
}

% \show\ifmp@keyfive

% The starred variant of \kve@definekeys gives error for the
% already defined key 'keyone':
% \kve@definekeys*[KV]{fam}[mp@]{keyone/+}

% Changing the family and macro-prefix makes 'keyone' definable again:
\kve@definekeys*[KV]{famx}[mpx@]{keyone/+}

\def\fourplus{+,+,+,+}
\newcommand*\putmany[2][*]{%
  \begingroup
  \toks@{}\@tempcnta\z@
  \loop
  \advance\@tempcnta\@ne
  \toks@\expandafter{\the\toks@#1}%
  \ifnum\@tempcnta<#2\relax
  \repeat
  \expandafter\endgroup\the\toks@
}
\newcommand{\testa}[2]{%
  \kve@setafterdefaults[KV]{fam}{#2}%
  \edef\tempa{\mp@keyone,\mp@keytwo,\mp@keythree,\mp@keyfour}%
  \noindent
  \vbox{%
    \hsize\dimexpr1.1\hsize\relax\leftskip=-1.5cm
    \def\redstar{\textcolor{red}{*}}\ttfamily
    Test #1: \redstar\space\texttt{\tempa}\space\redstar\space
    \ifxTF\tempa\fourplus
      {All values are defaults\putmany[\space]{2}}%
      {At least one value is set}%
    \@spaces\textcolor{red}{||} keyone's value: \userinput
  }%
}
\newcommand{\testb}[2][]{\testa{#2}{#1}}

\begin{document}

\title{The \texttt{\color{blue}keyval2e} Package \\Examples}
\maketitle

\testa{Aa}{}\\
\testa{Ba}{keyone=+,  keythree=+}\\
\testa{Ca}{keytwo=+,  keythree=a}\\
\testa{Da}{keyone=b,  keythree=a,keyfour=+}\\

\testb{Ab}\\
\testb[keyone=+,  keythree=+]{Bb}\\
\testb[keytwo=+,  keythree=a]{Cb}\\
\testb[keyone=b,  keytwo=+,keythree=a]{Db}\\

\end{document} 