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
.