Hlavní navigace

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

Michal Švamberg 11. 9. 2003

Nyní je již čas naučit se rejstřík kompilovat. Koukneme se na nějaké další vymoženosti, které nám usnadní vytváření rejstříku. Část o rejstřících uzavřeme příkladem.

Makeindex

Pro zpracování rejstříků v dokumentaci se používá program makeindex. Tento program si prohlédne dokument a vygeneruje na jeho základě soubory obsahující rejstřík. Použití programu je jednoduché:

makeindex dokument.idx

Před spuštěním makeindexu je potřeba dokument přeložit, protože teprve při překladu vznikne idx soubor, který zpracujeme na výstupní ind soubor programem makeindex.

Program makeindex je potřeba spustit na všechny vygenerované indexové soubory, tj. pro každý rejstřík zvlášť. Je samozřejmě možné spojit více rejstříků do jednoho výstupního, více v makeindex(1). Pro více rejstříků (tak, jak jsme je definovali v předchozí kapitole) může zpracování vypadat následovně:

makeindex dokument.idx
makeindex -o dokument.and dokument.adx
makeindex -o dokument.znd dokument.zdx

Pozor, pokud neuvedete výstupní soubor (parametr -o), pak se výsledek uloží automaticky do souboru s příponou ind. Tím si ovšem můžete přepsat jiný rejstřík.

Tisk rejstříku do dokumentu

Pro tisk rejstříku v dokumentu se používá příkaz \printindex. Při použití bez parametru použije soubor s rejstříkem podle názvu překládaného dokumentu s příponou ind. Pokud chceme jiný rejstřík, pak jej musíme zadat v parametru příkazu:

\printindex      % vytiskne defaultní rejstřík
\printindex[aut] % tisk autorského rejstříku
\printindex[zkr] % tisk rejstříku zkratek

Pro každý rejstřík se založí nová stránka, kde se použije jako nečíslovaný nadpis text z posledního parametru příkazu \newindex, který jsme použili v hlavičce dokumentu pro založení rejstříku.

Pokud si prohlédnete soubor ind, zjistíte, že se jedná o texovský dokument. Z toho vyplývá, že jej lze editovat a odstranit tak neduhy rejstříku, které se nedaří odstranit jinak. Je ovšem nutné připomenout, že tento soubor je generovaný programem makeindex, proto tyto úpravy provádějte až po dokončení dokumentu. To, že je možné tyto úpravy dělat, je dobré vědět, ale asi sami cítíte, že to není to pravé ořechové.

Při psaní dokumentace nebo vytváření rejstříku v již hotovém dokumentu se hodí vědět, jaká hesla máme na dané stránce v rejstříku. Běžně se použije balík showidx, ovšem ten funguje pouze pro defaultní rejstřík. Pro balík index je vhodnější použití příkazu \proofmodetrue. Tím se zobrazí seznam rejstříkových hesel na okraji dokumentu (v oblasti pro poznámky na okraji) na stránkách, kde se na ně odkazuje, tj. tam, kde máme příkaz  \index.

Příklad

V příkladu jsem pokusně sestavil první tři díly tohoto seriálu a vytvořil dva rejstříky. První jako defaultní je klasický s hesly. Druhý je rejstřík příkazů. Pokud se podíváte do zdrojového dokumentu, zjistíte dvě věci:

  • dokument je poněkud „přeindexovaný“
  • zdrojový kód výrazně ztratil na přehlednosti

Tento dokument je extrém, normálně budete mít odkazů méně a asi se budete je snažit dávat minimálně na samostatný řádek, abyste minimalizovali ztrátu přehlednosti.

Napřed si připravíme hlavičku dokumentu:

\documentclass[12pt]{article} % trošku větší font
\usepackage[czech]{babel}     % inicializace českých zvyklostí
\usepackage[latin2]{inputenc} % vstupní kódování
\usepackage{index}     % balík pro indexování

% inicializace rejstříků
\newindex{default}{idx}{ind}{Rejstřík}
\newindex{cmnd}{cdx}{cnd}{Rejstřík příkazů}

% pomocné příkazy
\def\cindex{\index*[cmnd]}        % zařazení do rejstříku příkazů
\newcommand{\hla}[1]{\textit{#1}} % pro vysvětlení pojmu

V těle dokumentu použijeme příkazy \index a \cindex pro vytvoření obou rejstříků. Na místě, kde budeme chtít rejstřík vytisknout, pak použijeme příkazy:

\printindex       % vytiskne defaultní rejstřík
\printindex[cmnd] % tisk rejstříku příkazů

Na závěr dokument přeložíme, necháme zpracovat rejstříky, a pak znovu přeložíme. Jednotlivé fáze překladu jsou s komentářem v tabulce:

Tabulka č. 486
tex  kompletní zdrojový kód
dvips 

latex doc.tex
dvips -o doc.ps doc.dvi

první překlad, ve výsledném dokumentu nejsou rejstříky
vytištěny, protože při prvním průchodu se teprve vytváří
do externích souborů.

idxind 

makeindex doc.idx

zpracování defaultního rejstříku, výstup je uložen
do souboru  doc.ind.

cdxcnd 

makeindex -o doc.cnd doc.cdx

zpracování rejstříku příkazů, výsledek je v souboru  doc.cnd.

dvips 

latex doc.tex
dvips -o doc.ps doc.dvi

druhý překlad, teprve nyní se nám zpracovaný
rejstřík vloží do dokumentu.

dvips 

latex doc.tex s příkazem \proofmodetrue
dvips -o doc.ps doc.dvi

jen pro ukázku je zde výsledek po překladu s příkazem
\proofmodetrue uvedeným v hlavičce
dokumentu.


Jak již bylo řečeno dříve, je potřeba kompletní překlad provést minimálně dvakrát (lépe pro jistotu třikrát). Důvodem je, že při prvním průchodu se místo rejstříků nebudou vkládat žádné stránky (protože rejstřík není vytvořen). Druhý překlad (s již přeloženými rejstříky) zajistí vložení rejstříků, ovšem to může posunout číslování stránek následujícího textu. Tudíž třetí překlad nám zajistí správně vygenerované obsahy dokumentu a křížové odkazy.

Normálně dva překlady stačí, protože většinou máme jen jeden rejstřík a za rejstříkem by neměl být už žádný text vztahující se k tématu dokumentu (dál mohou být například prázdné stránky pro poznámky nebo tiráž). Z toho plyne, že vložením rejstříku neměníme číslování stránek/kapitol v žádné jiné části dokumentu.

České řazení pojmů

Čeština je pro programátory z anglosaských zemí stále nepřekonatelným oříškem. A tak při kompilaci zjistíte, že makeindex zrovna podle české abecedy neřadí. Chytří čeští programátoři nelenili a napsali csindex , který už našim potřebám vyhovuje lépe. Ovládání je shodné s programem makeindex, ale umožňuje různá vstupní kódování (keybcs2, il2, koi8cs) parametrem <code>-z <code>, kde code je právě název vstupního kódování.

A zde se můžete podívat na rozdíly mezi příkazem makeindex doc.idx (první a druhá stránka rejstříku) a českou variantou csindex -z il2 doc.idx(první a druhá stránka rejstříku). Všimnout si můžete hesel, jako jsou část, Československé sdružení, čítač, při použití makeindex jsou až na konci rejstříku (druhá stránka), kdežto při csindex jsou na svém místě.

Závěr

Nyní umíte vytvořit několik různých rejstříků v dokumentu. Příště se vrátíme více k technickému dokumentu a pronikneme na místo, kde se ukrývá největší síla TeXu.

Oprava

Jedna oprava k předchozímu dílu. Příkaz \index*[typ]{pojem} slouží k tomu, abychom nemuseli pojem psát dvakrát. Ale použil se v dokumentu text pojem právě z příkazu index. Tudíž vzniknou dva ekvivalentní zápisy:

Příkaz command \index{command} se nepoužívá.
Příkaz \index*{command} se nepoužívá.

Typ rejstříku lze zvolit u příkazu \index i \index*  nepovinným parametrem:

Slunce \index[hvezda]{Slunce} je středem sluneční soustavy.
\index*[hvezda]{Slunce} je středem sluneční soustavy.

Našli jste v článku chybu?

18. 6. 2010 16:53

Luk (neregistrovaný)

A jak se tady tech veci da pouzit v latexu? Me se furt zda ze vsude vsechno je pro TeX.

Rejstrik mi to udela, ale nikdy neni zarovnany na praporek. A uz vubec mi nefunguje csindex.


A taky mam na zacatku rejstriku napsane Index a ne Rejstrik a pod tim anglicky odstavec

Numbers written in italic refer to the page where the corresponding entry is described numbers underlined refer to the definition; numbers in roman refer to the pages where the entry is used.








11. 9. 2003 17:25

Milan Vancura (neregistrovaný)

Kdyz jsme u tech hnidopisskych poznamek: proc po kazdem prekladu nasleduje i dvips, kdyz stejne vim, ze dokument nemam hotovy?

Take by stalo za to uvest zpusob, jak poznam, ze jsem ukoncil posledni preklad - tj. jestli potrebuju dva, tri nebo i vice prekladu (odstrasujici pripady s pretekanim kvuli novemu cislu strany apod.)

jinak uzitecny clanek vhodny urcite pro vsechny zacatecniky, diky za nej.





Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

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

ČRo rozšiřuje DAB do Berouna

Root.cz: Telegram spustil anonymní blog Telegraph

Telegram spustil anonymní blog Telegraph

Vitalia.cz: I církev dnes vyrábí potraviny

I církev dnes vyrábí potraviny

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

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

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

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

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

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

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

Jak vymáhat výživné zadarmo?

120na80.cz: Vitaminová abeceda

Vitaminová abeceda

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

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

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