Keyval
Jedna z možností, jak předávat parametry (ať už makru, environmentu, balíčku, nebo třídě) je syntaxí keyval (key=klíč + value=hodnota). Ta vypadá tak, že máme seznam (oddělený čárkami) klíč=hodnota (nebo samotných klíčů), tedy například následující.
a4paper,left=2cm,right=2cm,top=3cm,bottom=4cm
Tento způsob je sice velmi mocný, ale pro jednoduché parametry příliš neohrabaný. Proto se používá často jako první, nepovinný parametr, a většinou slouží k zapnutí nebo úpravě nějakého speciálního chování (speciálně v případě \usepackage[klíč=hodnota,dalšíklíč]{balicek} k nastavení balíčku).
MWE
\DeclareKeys[mamPozdrav]{
koho.store = \koho,
tucne.if = tucne,
log.code = \wlog{zdravil jsem}
}
\NewDocumentCommand\pozdrav{O{}}{%
\SetKeys[mamPozdrav]{koho=světe}%
\SetKeys[mamPozdrav]{#1}%
{\iftucne\bf\fi Ahoj \koho!}%
}
Poté
- samotné
\pozdravvypíše „Ahoj světe!“, \pozdrav[tucne,koho=MaM]vypíše „Ahoj MaM!“ a\pozdrav[tucne,log]vypíše „Ahoj světe!“, a navíc do logů vypíše „zdravil jsem“.
Syntaxe
Makra sloužící k manipulaci s keyval mají nepovinný parametr (zde [pojmenování]), který slouží k rozlišení různých množin nadefinovaných klíčů.
Použití v definici makra nebo balíčku
V makru a environmentu se zadefinované (viz dále) klíče použijí pomocí makra \SetKeys[pojmenování]{#N}, které interpretuje svůj vstup (tedy obsah N-tého parametru) jako naše keyval.
V balíčku nebo třídě se použijí pomocí makra \ProcessKeyOptions[pojmenování], které interpretuje parametry balíčku/třídy jako naše keyval.
Defaultní hodnoty
Pomocí \setKeys[pojmenování]{...} se dá navíc nastavit defaultní hodnoty (před zavoláním makra z předchozí sekce) tím, že do složených závorek napíšeme
Definování
To, jak se jednotlivé klíče budou chovat, definujeme pomocí \DeclareKeys[pojmenování]{...}. Tomu předáme seznam formulací klíč.cosním = něco oddělených čárkami. klíč je prostě název daného klíče (pokud se nepletu, může se i opakovat). cosním je pak (všechny možnosti najdete v dokumentaci L3 vrstvy LaTeXu):
.code: pokud je zadánklíč, pak provede kód vněco..store: pokud je zadánoklíč=hodnota, pak uložíhodnotado makraněco(tj. něco musí být validní název makra, tedy musí začínat\a pak pokračovat např. písmeny bez diakritiky). (Jako by bylo zavoláno\defněco{hodnota}.) Pokud chceme defaultní hodnotu, pak stačí zavolat\SetKeys[...]{klíč=hodnota}před\SetKeys[...]{#N}nebo\ProcessKeyOptions[...]..if: dává nám možnost použít syntax\ifněco kód pokud byl klíč zadán\else kód pokud byl nezadán\fi(tj.něcomusí být validní název makra bez\, tedy např. písmena bez diakritiky)..ifnot: funguje jako.if, jen nastavuje podmínku opačně (a vypadá to, že je třeba před\SetKeys[...]{#N}nebo před\ProcessKeyOptions[...]zavolatněcotrue, jinak bude vždycky false)..pass-to-packages: pro keyval třídy, říká, že daný klíč má být přidán do globálních keyval, které čtou balíčky? (Neozkoušeno, hned, jak to někde vyzkouším, to sem dopíšu.).usage:něcopak je z množinyload,preamblenebogenerala určuje, zda daný klíč musí být přítomen už při načítání balíčku, nebo musí být použit (předpokládám, že pomocí\PassOptionsToPackagenebo\PassOptionsToClass) před\begin{document}, nebo kdekoliv. (Neozkoušeno, hned, jak to někde vyzkouším, to sem dopíšu.)
