sobota, 20 listopada 2010

Przykład wykorzystania pakietu keyval

LaTeXowe makro z dwoma opcjonalnymi i dwoma obowiązkowymi argumentami. Wartością domyślną opcjonalnych argumentów są argumenty wymagane. Można to zaimplementować następująco:


\documentclass{article}
\usepackage{keyval}
\makeatletter
%% ...
\define@key{hopla}{foo}{\def\HoplaArgFoo{#1}}
\define@key{hopla}{bar}{\def\HoplaArgBar{#1}}
\newcommand\HoplaCommand[3][]{%
%% `reset' wartości poleceń \HoplaArgFoo/\HoplaArgBar
\let\HoplaArgFoo \@empty \let\HoplaArgBar \@empty
\setkeys{hopla}{#1}%%
%% jeżeli \HoplaArgFoo jest empty, tj. nie podano argumentu foo:
\ifx\HoplaArgFoo \@empty \def\HoplaArgFoo{#2} \fi
%% to samo dla \HoplaArgBar:
\ifx\HoplaArgBar \@empty \def\HoplaArgBar{#3} \fi
%% demonstracja:
FooArg: \HoplaArgFoo. BarArg: \HoplaArgBar. [#2 #3]\par }
\makeatother
%% ...
\begin{document}

\HoplaCommand[foo=OA1,bar=OA2]{Arg1}{Arg2}

\HoplaCommand[bar=OA2]{Arg1}{Arg2}

\HoplaCommand{Arg1}{Arg2}
\end{document}

BTW: plik latex.ltx zawiera \def\@empty{} -- gdyby ktoś był ciekaw co to za tajemnicze \@empty.

Brak komentarzy:

Prześlij komentarz