Uživatelské nástroje

Nástroje pro tento web


latex:prog:keyval

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é \pozdrav vypíš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án klíč, pak provede kód v něco.
  • .store: pokud je zadáno klíč=hodnota, pak uloží hodnota do makra ně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ěco musí 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[...] zavolat ně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ěco pak je z množiny load, preamble nebo general a 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í \PassOptionsToPackage nebo \PassOptionsToClass) před \begin{document}, nebo kdekoliv. (Neozkoušeno, hned, jak to někde vyzkouším, to sem dopíšu.)
latex/prog/keyval.txt · Poslední úprava: autor: Jonáš Havelka

Kromě míst, kde je explicitně uvedeno jinak, je obsah této wiki licencován pod následující licencí: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki