Hlavní navigace

Jak na LaTeX: rejstřík balíkem index

Michal Švamberg 26. 6. 2003

Do rozsáhlejších technických dokumentací je vhodné připravit rejstřík. V dnešním dílu si ukážeme, jak takový rejstřík začít vytvářet.

Rejstřík

Vytvoření rejstříku se provádí v podstatě ve dvou krocích. Napřed musíme vybrat pojmy, které v rejstříku chceme zobrazit. Potom je třeba z označených pojmů nechat rejstřík vygenerovat.

Inicializace rejstříku

Základním balíkem pro rejstřík je makeidx, ale raději bych vám doporučil balík index, který lze snadno také použít pro jiné seznamy než jen rejstříky. Do hlavičky dokumentu vložíme:

\usepackage{index}

Tím získáme k dispozici potřebné příkazy pro vytváření rejstříku. Ovšem ještě musíme náš rejstřík inicializovat příkazem:

\newindex{typ}{přípona_dx}{přípona_nd}{nadpis}

Hodnotu typ lze nastavit na default pro rejstřík, k němuž chceme přistupovat častěji. Pokud chceme použít více rejstříků (např. rejstřík zkratek nebo autorský rejstřík), pak každý z nich musí mít unikátní typ, který si můžeme libovolně zvolit. Parametr přípona_dx označuje příponu souboru, do nějž se budou ukládat záznamy pro rejstřík. Tento soubor vzniká při kompilaci dokumentu, příkaz pro vložení položky do rejstříku vytvoří v souboru s příponou přípona_dxnový záznam. Externím programem makeindex vytvoříme soubor s příponou přípona_nd, ten již obsahuje naformátovaný a správně sestavený rejstřík. Základní jméno pro rejstříkové soubory je odvozeno od jména souboru s kompilovaným dokumentem. Poslední položkou v příkazu je nadpis, kterým definujeme nadpis rejstříku.

Nyní je čas ukázat si hlavičku dokumentu se třemi nezávislými rejstříky, které budeme chtít v našem dokumentu mít:

\usepackage{index}

\newindex{default}{idx}{ind}{Rejstřík}
\newindex{aut}{adx}{and}{Autorský rejstřík}
\newindex{zkr}{zdx}{znd}{Rejstřík zkratek}

Není sice povinné mít přípony rejstříkových souborů právě takto ( *.?dx, *.?nd), ale je to běžné pojmenování a lze pouze vřele doporučit jeho používání.

Vložení pojmů do rejstříku

Na místě, kde se nachází text, který chceme vložit do rejstříku, použijeme příkaz

\index*[typ]{položka} 

kde typ jsme si definovali v příkazu \newindex. Do parametru položka napíšeme text, který chceme, aby se v rejstříku zobrazoval. Součástí tohoto parametru mohou být také další informace, jako je formátování čísla stránky uvedené v rejstříku za položkou. Pro rejstřík s typem default je předdefinovaný pří­kaz

\index{položka}. Pro jiné rejstříky si můžeme nadefinovat vlastní příkaz, například pro autorský index bychom chtěli používat příkaz  \aindex{položka}:

\def\aindex{\index*[aut]}

Vzhled, rozsah a formátování položky v rejstříku se ovlivňuje přímo v parametru položka těmito znaky

Tabulka č. 441
! oddělovač úrovní položky, k dispozici jsou maximálně tři úrovně
@ oddělovač jména položky a zobrazeného textu v rejstříku
| oddělovač položky a formátování čísla stránky
( začátek rozsahu platnosti položky
) konec rozsahu platnosti položky
" escape sekvence pro možnost zobrazení výše uvedených znaků

Toto jsou základní parametry, které použijete nejčastěji, o dalších se můžete dočíst v dokumentaci k pros­tředí ind.dvi.gz . Na příkladech převzatých z této dokumentace si můžeme ukázat použití příkazu

\index:

zakladni uziti prikazu index


Všimněte si, jak je rejstřík abecedně uspořádán a že není závislý na tom, zda je položka zapsaná velkými, nebo malými znaky písma. Vytvořený rejstřík také respektuje způsob číslování stránek, na nichž se příkaz \index nacházel.

dvouurovnovy rejstrik


Takto vypadá dvouúrovňový rejstřík. Jednotlivé úrovně se oddělují právě znakem vykřičníku (!), pokud definice nižší úrovně chybí (v příkladu položka ‚gnus‘), je automaticky vytvořena, ale není k ní přiřazeno žádné číslo stránky.

triurovnovy rejstrik


Tříúrovňový rejstřík je maximum toho, čeho lze dosáhnout, a je to pouze dobře, protože rejstřík s ještě více úrovněmi by se stal spíše nepřehledným a také se už velmi obtížně vytváří a špatně udržuje.

rozsah platnosti položky


Pokud chceme do rejstříku zařadit pojem, který má platnost v rozsahu několika stránek (například část nějaké kapitoly), neuděláme to tak, že na každou stránku okopírujeme příkaz \index, ale v příkazu uvedeme, že zde pojem začíná, pomocí přípony |( a jeho ukončení určíme příponou |). Svislítko (pípa) odděluje text pojmu od části určující práci s číslem stránky, kulaté závorky pak značí začátek a konec platnosti pojmu. Pokud se pak pojem objeví na více stránkách, bude v rejstříku zapsán celý jeho rozsah. Pokud bude rozsah uplatněn pouze na jedné stránce, zobrazí se tak, jako bychom použili jednoduchý příkaz \index (v příkladu položka ‚gnus!bad‘).

pouziti odkazu 'see'


pouziti odkazu 'viz'


Balík index nám připravil příkaz \see{text}, který vytiskne správně naformátovaný odkaz s textem text. Horní příklad je přeložen v anglickém prostředí LaTeXu, pokud ale máme zapnuté české prostředí, bude to po překladu stejné kódu vypadat dle příkladu pod ním. V příkazu \index se příkazy pro stránky (v části za svislítkem) píší bez úvodního zpětného lomítka, toto lomítko přidá automaticky program makeindex do výstupního souboru s příponou přípona_dx. Tím je zaručeno to, že se překlad a jeho formátování provede ve chvíli, kdy to budeme potřebovat (tedy až na místě, kde budeme chtít rejstřík vytisknout) a nikoliv tam, kde jsme příkaz \index uvedli.

prejmenovani pojmu


Nezřídka se stane, že chceme do rejstříku zařadit pojem, který se nějak jmenuje, avšak chceme jej jinak zobrazit. K tomu nám slouží oddělovač @ (zavináč). Podle textu před zavináčem se položka abecedně zařadí do rejstříku, ale na její místo se vytiskne text uvedený za zavináčem. Proto se může zdát, že pojem ‚xx‘ není správně podle abecedy. Tato vlastnost nám umožňuje formátovat jméno pojmu v rejstříku, například pokud bychom chtěli nějakou položku zdůraznit, pak ji můžeme zapsat příkazem  \index{gnu@\textbf{gnu}}.

prejmenovani pojmu - matematika


To samé v bledě modrém. Pro formátování zobrazení je zde použito prostředí matematiky (uvozené a zakončené znakem $ (string)). Příkaz \alpha vytiskne místo sebe řecké písmeno alfa. Všimněte si, jak se provedlo abecední uspořádání a jak si poradil LaTeX (ve skutečnosti program makeindex) s tím, že má dvě stejné položky (řádek 13 a 14) pro třídění, ale s různým zobrazením.

Pro formátování čísla v rejstříku slouží oddělovač | o kterém jsme se již zmínili ve spojitosti s příkazem \see. Za tento oddělovač lze zapsat jméno příkazu (např. command), který program makeindex rozvine do podoby

\command{číslo stránky}

To je vhodné, pokud chceme v rejstříku například rozlišit, že na daném místě je pojem vysvětlen (vyznačíme skloněným písmem pomocí \textit{}) a na jiném se vztahuje například k obrázku nebo k tabulce (což můžeme vyznačit tučným písmem příkazem  \textbf{}).

\index{pojem}
\index{pojem!vysvětlení|textit}
\index{pojem!tabulka|textbf}

Ovšem daleko vhodnější je vytvořit si vlastní příkaz, kterým bychom mohli v případě potřeby ovlivnit všechny položky, pokud bychom je potřebovali změnit. Takže si vytvoříme nové příkazy:

\newcommand{\hla}[1]{\textit{#1}} % příkaz \hla{}
    pro vysvětlení pojmu
\newcommand{\obr}[1]{\textbf{#1}} % příkaz \obr{}
    pro pojem v obrázku
\newcommand{\tab}[1]{\textbf{#1}} % příkaz \tab{}
    pro pojem v tabulce
\newcommand{\poz}[1]{#1n} % příkaz \poz{}
    pro pojem v poznámce pod čarou

K příkazu \newcommand jsme se ještě nedostali a proto lehký úvod. V prvním parametru se definuje jméno příkazu, jakým jej chceme volat. Druhým parametrem říkáme, že náš nový příkaz bude mít jeden parametr. Posledním parametrem nastavíme, co se má provést, vlastně na co se náš příkaz má rozvinout, s tím, že na pozici #1 se umístí hodnota parametru příkazu. Například tato volání se rozvinou následovně:

\hla{abcd}     => \textit{abcd}

\obr{1}        => \textbf{1}
\pic{$\alpha$} => \textbf{$\alpha$}

\poz{123}      => 123n

V příkazech \index pak naše nové příkazy použijeme následně:

\index{pojem} % normální odkaz na pojem
\index{pojem|pic} % číslo stránky bude tučně (dle příkazu \pic{})
\index{pojem|(hla} % začátek rozsáhlého hlavního pojmu

\index{pojem|)hla} % konec rozsáhlého hlavního pojmu
\index{pojem|poz} % pojem v poznámce, k číslu stránky přidá 'n'


Nyní když budeme chtít obrázky tisknout neproporcionálním písmem, tak nám stačí změnit definici příkazu \pic a dokument znova zkompilovat.

Závěr

Jak asi správně tušíte, všechny výše uvedené vymoženosti lze používat současně. To si ukážeme v příštím dílu na rozsáhlejším příkladu. A také si povíme, jak rejstřík zkompilovat a jak jej vložit do dokumentu.

Našli jste v článku chybu?

18. 2. 2011 14:59

mata (neregistrovaný)

Take si odpovim sam. Tady je ke stazeni CSIndex co umi cp1250:

http://www.kosek.cz/tex/

S tim 'ch' zrovna pracuje spatne. Do bloku, ktery odpovida 'ch' vlozi \indexspace pri kazde zmene 'C' -> 'c' a 'c' -> 'C'. To uz ale jde odstranit snadno rucne. Jinak funguje bezvadne.

17. 2. 2011 12:55

mata (neregistrovaný)

Zdravim, lze neakym zpusobem zajistit aby se polozky v rejstriku radily podle ceske abecedy? Da se to zajisti tim, ze pro zaindexovvani pouziji napriklad

\index{hzzzChom­sky@Chomsky}{Chom­sky}

kdyz vsechna slova zacinajici na 'ch' uvedu se stenym prefixem 'hzzz' tak se zaradi v rejstriku za h a budou serazena spravne, pripada mi to ale nekoncepcni. Lepsi by bylo rict nejak makeindexu jak to ma tridit.

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET