1 Jun 2008 16:44
Re: (x)keyval værdi uden om keys
Morten Høgholm <morten.hoegholm <at> latex-project.org>
2008-06-01 14:44:53 GMT
2008-06-01 14:44:53 GMT
On Sun, 01 Jun 2008 15:55:02 +0200, Lars Madsen wrote:
> jeg kunne godt tænke mig at lave en makro som kan tage key=value
> værdier, men hvor makroen også kan anvendes som følger
>
> \hest[macroname=Cat,format=\mathbb]{C}
>
> \hest[\mathbb]{C}
>
> dvs, har man en værdi uden en key, så skal 'format' anvendes som
> default, dvs. dette skulle også kunne lade sig gøre
>
> \hest[macroname=Cat,\mathbb]{C}
>
> nogen der ved om dette er muligt med de nuværende redskaber? her tænker
> jeg mest på xkeyval
kvsetoptions har en default for uidentificerede keys. Det kræver dog lige
et mindre hack i den ærede hr. Oberdieks kode for at få det til at virke,
idet der ikke er taget højde for at en nøgle kan være en kontrolsekvens,
der ikke kan tåle at blive ekspanderet. Jeg har her valgt bare at gøre den
uskadelig med \string.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{kvsetkeys}
\usepackage{keyval,amssymb,trace}
\makeatletter
\def\kv <at> processor <at> default#1#2#3{%
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname KV <at> #1 <at> \string#2\endcsname\relax % <--- MH
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname KVS <at> #1 <at> handler\endcsname\relax
\kv <at> error <at> unknownkey{#1}{#2}%
\else
\csname KVS <at> #1 <at> handler\endcsname{#2}{#3}%
\relax
\fi
\else
\ifx\kv <at> value\relax
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname KV <at> #1 <at> #2 <at> default\endcsname\relax
\kv <at> error <at> novalue{#1}{#2}%
\else
\csname KV <at> #1 <at> \string#2 <at> default\endcsname % <--- MH
\relax
\fi
\else
\csname KV <at> #1 <at> \string#2\endcsname{#3}% <--- MH
\fi
\fi
}
\newcommand*\hest[2][]{%
\kvsetkeys{equine}{#1}%
\ensuremath{\equine <at> format{#2}}%
}
\kv <at> set <at> family <at> handler{equine}{%
\def\equine <at> format{#1}%
}
\define <at> key{equine}{format}[\mathbb]{%
\def\equine <at> format{#1}%
}
\makeatother
\begin{document}
\hest[format=\mathbf]{C}
\hest[\mathbb]{C}
\end{document}
--
--
Morten
RSS Feed