[cstex] nepovinne parametry prikazu

Zdenek Wagner zdenek.wagner at gmail.com
Mon Aug 19 16:57:51 CEST 2019


po 19. 8. 2019 v 16:14 odesílatel <hospodka at fel.cvut.cz> napsal:
>
> Preji dobry den.
>
> Pisu prikaz pro skladani nejake grafiky a textu. Narazil jsem na
> problem, na ktery jsem kratky.
>
> Pro parametry prikazu by se me velmi libil pristup, ktery je ouzity
> napr. u prikazu \includegraphics
>
> muj prikaz \fig bych rad koncipoval stejne: jeden povinny parametr a
> pak volby, napr.:
>
> \fig[scale=0.8,size=\small, ...]{jemno_obr.pdf}
>
> Nedelal nekdo neco podobneho, abych to nemusel vymyslet (asi bych to
> nedal a sel cestou nejakych danych povinnych parametru).
>
Dobrý den,

\newcommand a \DeclareRobustCommand to umí automaticky, je to
vysvětleno např. zde:
https://en.wikibooks.org/wiki/LaTeX/Macros

Pokud chci, aby při vynechání nepovinného parametru nebylo dosazeno
nic, pak ten defaultní parametr v deklaraci nechám prázdný. A pak je
nutno odlišit prázdný parametr od neprázdného. Ve všech případech,
které jsem potřeboval, nesměl být v nepovinném parametru znak $. Proto
jsem použil tento test:

\ifcat$#1$ A\else B\fi

Test \ifcat porovnává kategorii následujících dvou tokenů, přičemž
provádí plnou expanzi. Pokud je tedy první parametr prázdný, pak TeX
vidí \ifcat$$. Podmínka je splněna, provede se A. Pokud je v parametru
cokoliv co nezačíná znakem dolar, pak podmínka splněna není, ignoruje
se vše až do \else včetně a provede se B. Pokud by A a/nebo B
obsahovaly makra, která nelze expandovat uvnitř podmínky, použil bych
složitější zápis:

\ifcat$#1$ \def\next{A}\else \def\next{B}\fi \next

Doporučuju používat hvězdičkové varianty, tedy \newcommand* a
\DeclareRobuseCommand* (pak náseduje jméno atd.). Bez hvězdiček jsou
deklarace ekvivalentní konstrukci \long\def, což vede k tomu, že se
nezachytí včas zapomenutá závorka. Chyba ve zmršeném souboru se pak
špatně hledá.


> S pozdravem Jiri Hospodka
>
>

Zdeněk Wagner
http://ttsm.icpf.cas.cz/team/wagner.shtml
http://icebearsoft.euweb.cz
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> https://lists.felk.cvut.cz/mailman/listinfo/cstex



More information about the csTeX mailing list