Ruzny pocet parametru makra (plain)
David Necas (Yeti)
yeti at physics.muni.cz
Sat Feb 15 23:21:19 CET 2003
On Sat, Feb 15, 2003 at 07:04:42PM +0100, Josef Polách wrote:
> Dobry den,
>
> Potrebuji napsat makro, ktere muze nekdy pracovat se dvema parametry a jindy
> pouze s jednim. Vyskytne-li se pouze jeden, pouzije se na dvou mistech, pokud
> jsou dva, pouzije se jeden na jednom a druhy na druhem miste. Pouziti napr. u
> nadpisu kapitoly -- Obsah jednoho parametru se pouzije do textu, obsah
> druheho (pokud je) do plovouciho zahlavi a do obsahu. Pokud druhy neni,
> pouzije se vsude ten prvni. (Neco jako v LaTeXu \section{Nadpis do
> textu}[Nadpis do obsahu] -- nebo jak to presne je, dlouho jsem s tim nedelal.)
>
> Chci se samozrejme vyhnout brutalnimu reseni, abych psal pri kazdem pouziti
> makra obe varianty nadpisu, i kdyz jsou (vetsinou) stejne.
>
> Pokud mi navrhnete reseni z TBN, str. 38, radek 51 a dal, napiste mi prosim,
> jak se to da prakticky pouzit. Nemohu prijit na zpusob, jak je zamontovat do
> definice.
Jsou-li parametry pouze jeden nebo dva a ne pole, je možná
vhodnější LaTeXová syntaxe s [] pro nepovinný parametr.
Je to mj. v TBN na str. 367, řádky 348-353
%%\catcode`\@=11
\def\macro{\futurelet\nextchar\@macro}
\def\@macro{\ifx[\nextchar \let\next\@macrowp \else \let\next\@macrowop \fi
\next}
Kde \@macrowp a \@macrowop mohou být např.
\def\@macrowp[#1]#2{\@@macro{#1}{#2}}
\def\@macrowop#1{\@@macro{#1}{#1}}
\def\@@macro#1#2{\#1 je #1, \#2 je #1\par}
(Petr Olšák to má ovšem bez těch @, zatímco já nemám talent
na vymýšlení názvů pomocných maker, takže píšu zavináče ;-)
Nebo se dá převzít \@ifnextchar řešení z LaTeXu, které
trochu snižuje duplicitu kódu, pokud byste to potřeboval
u hodně maker.
Yeti
More information about the csTeX
mailing list