# PB029: Sazba rejstříku

Rejstřík (osob, pojmů, míst, …) pomáhá orientaci v rozsáhlejších dokumentech. Vysvětlíme si základní principy vytváření rejstříků a předvedeme si, jak rejstříky sázet TeXem.

## Výběr slov do rejstříku

Výběr slov do rejstříku je autorská záležitost a odvíjí se od typu rejstříku, který sestavujeme. Např. v případě rejstříku autorů je volba přímočará – rejstřík by měl obsahovat odkazy na všechny autory v publikaci. V případě rejstříku pojmů můžeme odkazovat primárně na místo s definicí pojmů, sekundárně pak na místa v textu, kde se s daným pojmem významně pracuje (přičemž autor textu musí určit, co je u daného pojmu jeho významné použití).

## Postup při vytváření rejstříku

Problematika vytváření rejstříku TeXem je rozebrána např. v článku Zdeňka Wagnera ve Zpravodaji CSTUG 4/1992. V textu článku je předvedena tvorba rejstříků pomocí nástrojů `makeindex`. Ty mají některá nepříjemná omezení a dnes jsou již překonané (pro tvorbu rejstříku je vhodnější využít nástroje `texindy`). Zvýšenou pozornost věnujte především informacím o správném českém/slovenském řazení slov.

Proces tvorby rejstříku v TeXovém dokumentu je možné rozdělit do dvou fází: označkování pojmů, které se mají stát součástí rejstříku, a samotné vytvoření seřazeného rejstříku při překladu dokumentu.

### Značkování v TeXovém zdrojovém textu

Způsob značkování pojmů vkládaných do rejstříku je popsán v komentovaném ukázkovém dokumentu `rejstrik.tex` (dostupném také na službě Overleaf).

Dokument `rejstrik.tex` přeložte pdfTeXem `pdflatex rejstrik.tex` a přečtěte si vysázený text.

### Tvorba rejstříku při překladu

Všimněte si, že dokument `rejstrik.tex` po jednoduchém přeložení TeXem (mimo službu Overleaf) neobsahuje vysázený rejstřík. Ten je totiž třeba vytvořit v dalším kroku externím programem, a pak opakovat překlad TeXového dokumentu (proces překladu je tedy vhodné automatizovat):

1. `pdflatex rejstrik.tex`
   - Dokument je vysázený bez rejstříku, ovšem při překladu vznikne soubor `rejstrik.idx`, který obsahuje informace nutné pro vytvoření rejstříku.
2. `# Pokud pracujete na unixovém serveru FI, přidejte perlový modul: module add perl
   texindy -I latex --language czech --codepage utf8 rejstrik.idx # Pro dokument v češtině
   texindy -I latex --language slovak-large --codepage utf8 rejstrik.idx # Pro dokument ve slovenštině
   `
   - Informace ze souboru `rejstrik.idx` zpracuje program `texindy` (varianta programu `xindy` přizpůsobená pro použití s TeXem; `texindy` je standardní součástí instalace TeX Live). Výsledkem překladu je soubor `rejstrik.ind` s vygenerovaným rejstříkem v LaTeXovém značkování.
   - Pokud používáme TeXový kompilátor, který pracuje nativně s kódováním Unicode (např. XeTeX nebo LuaTeX), můžeme namísto parametrů `-I latex --codepage utf8` použít parametr `-I xelatex`, který `texindy` přepne do odpovídajícího režimu.
   - Při práci s anglickým textem můžeme namísto programu `texindy` rovněž využít program `makeindex`: `makeindex rejstrik.idx`
   - Pokud vám nevyhovuje žádné zmíněné řešení, můžete rejstřík vytvářet i třídit v TeXu samotném, jak popsáno v článku Petra Březiny ve Zpravodaji CSTUG 1/2007.
3. `pdflatex rejstrik.tex`
   - Soubor `rejstrik.ind` je při překladu načtený do `rejstrik.tex` a rejstřík se tedy objeví ve výsledném PDF dokumentu.

Tip:

Balíček `imakeidx` nám umožňuje snadno upravit formátování rejstříku a využívá schopnosti moderních TeXových strojů spouštět externí programy pro automatické spuštění programu `texindy`. Tato schopnost ale interferuje s nástrojem `latexmk` pro automatizaci sazby, který využívá služba Overleaf.

Při využití balíčku `imakeidx` na službě Overleaf uveďte volbu `noautomatic` a spuštění programu `texindy` si vyžádejte pomocí konfiguračního souboru `latexmkrc`, vizte ukázkový dokument na službě Overleaf.

## Praktické úkoly k procvičení

- Pokud jste si jako svůj první zápočtový dokument vybrali životopis, přidejte do něj rejstřík podle pokynů v zadání.
- Pokud jste si jako svůj první zápočtový dokument vybrali referát do Zpravodaje CSTUGu, upravte ukázkový dokument `rejstrik.tex` (dostupný také na službě Overleaf), nebo `imakeidx.tex` (dostupný také na službě Overleaf) tak, aby se rejstřík nesázel na samostatné straně.
- Pomocí balíčků `index`, `varindex`, `imakeidx`, anebo jiných dostupných v katalogu CTAN rozšiřte ukázkový dokument o druhý rejstřík.
  - Pozor, pokud nepoužijeme např. balík `imakeidx`, který program `texindy` spustí automaticky, je nutné připravit každý rejstřík zvlášť! Pokud si tedy vytvoříme rejstřík autorů pomocí příkazu `\newindex{aut}{adx}{and}{Rejstřík autorů}` balíčku `index`, pak z vygenerovaného `.adx` souboru musíme vygenerovat soubor `.and` pomocí voleb `-o rejstrik.and rejstrik.adx` programu `texindy`.