Hlavní navigace

Jak na LaTeX: struktura dokumentu

26. 7. 2001
Doba čtení: 9 minut

Sdílet

Každý dokument má nějakou strukturu. A dnes se protáhneme právě pojmy jako je kapitola, podkapitola či odstavec.

Teorie

Ačkoliv se překladač při formátování textu všemožně snaží, aby byl text co nejpěknější, stane se někdy, že se vše nepodaří tak, jak má. Dnes si řekneme o chybách nazývaných vdovasirotek. I když zde budu mluvit pouze o případu při přechodu na další stránku, jedná se též o problém vícesloupcové sazby, kde přechodem na další stránku rozumíme také ukončení jednoho sloupce a přechod na nový sloupec na téže stránce.

Vdovou nazýváme první řádek nového odstavce, který zůstal na předchozí stránce. Tato chyba je zvláště neomluvitelná, pokud se to stane u titulku (tedy nadpis na předchozí stránce a text na další). Sirotek je chybou obdobnou, ale tentokrát poslední řádek odstavce přeteče na další stránku, kde se stane řádkem prvním. Tato chyba má také neodpustitelnou verzi, a to v případě, že stránka je pak dále prázdná (tzn. že na stránce je samostatný řádek (nedej bože, pokud se řádek skládá pouze z jednoho slova)).

Obě chyby se v kvalitních pracích (zvláště jako je diplomová práce) nesmí vyskytnout. Nejen že jsou ošklivé a hrubě porušují pravidla správné sazby, ale hlavně roztrhnou text a při čtení pak člověk ztrácí kontinuitu a hlavní téma.

Pro odstranění takové chyby máme několik možností:
  1. jsme-li autorem textu, máme možnost přeformulovat odstavec tak, aby vdova/sirotek nevznikl.
  2. vhodně spojíme/rozdělíme odstavce.
  3. jiným způsobem naformátujeme předchozí odstavce.
  4. řekneme překladači, kde má/nemá přejít na další stránku (nařídíme nebo zakážeme stránkový zlom).
  5. na stránce (v sloupci) změníme počet řádků (porušíme tím tzv. řádkový rejstřík), je to krajně nevhodné ve sloupcové sazbě (řádky jednotlivých sloupců „nesedí“ v jedné linii) nebo v oboustranné sazbě (kniha), kde pak „ruší“ čtenáře prosvítání nesouhlasných řádků z druhé stránky listu (prostě řádky si na sebe nesedly). I přesto je to jeden z nejpoužívanějších způsobů, nevhodný však pro knižní sazbu, kde způsobuje výše uvedený problém.
  6. automaticky odstraníme - kvalitní programy dovolují definovat velikost sirotka/vdovy, a ty se pak program snaží při sazbě odstranit.
Na příkladu simulované vícesloupcové sazby si ukážeme, jak tyto chyby vypadají:

Členění textu

Pro členění se používá několik úrovní, každou úroveň nelze použít v každém stylu. Proto nejlépe formou přehledu:

Příkazy mají dva parametry, do povinného se zapisuje řetězec, který se má vytisknout a případně očíslovat. Do nepovinného lze zapsat řetězec, který se má vytisknout v obsahu. To se může hodit, pokud máme v nadpisu například nějaký matematický výraz a byli bychom radši, kdyby byl v obsahu pojmenován jménem, nikoliv symbolem.

Příkazy mají ještě svoji „hvězdičkovou“ obdobu. Pokud za jméno příkazu (řídícího slova) uvedeme *  (hvězdičku), nebude daný nadpis číslován a nebude zahrnut ani do obsahu. Příkazy, které standardně nejsou číslovány ( \paragraph\subparagraph) se v hvězdičkované verzi chovají úplně stejně jako bez hvězdičky.

Lze použít ještě jedno členění textu, které zde nebylo zmíněno. Jedná se o jeden nebo více prázdných řádků, které text dělí na „klasické“ odstavce, jež nemají nadpisek, ale začátek je o něco málo odražen. Tento typ odstavce se nezahrnuje do obsahu ani nemá svůj vlastní čítač, pouze začátek dalšího textu poodstrčí od okraje.

Specialitkou je příkaz \appendix, kterým označujeme začátek příloh. Příkaz nastaví jiný způsob číslování a provede znovu nastavení čítačů na počáteční hodnoty.

Obsah

Důležitou součástí dokumentu je i obsah. Ten se generuje příkazem \tableofcontents. Při používání tohoto příkazu je nutné provést překlad dokumentu programem latex minimálně dvakrát.

To je způsobeno tím, že pro vytvoření obsahu je využíván soubor s příponou .toc (svou podstatou je to vygenerovaný zdrojový soubor pro LaTeX, který se vloží na místo příkazu). Tento soubor se ale vytváří teprve při překladu, a kompletní je až po jeho ukončení. Z tohoto důvodu je potřeba překlad spustit poprvé pouze za účelem vytvoření souboru s uloženým obsahem. A při druhém překladu se obsah vysází podle kompletního souboru. Nyní to vypadá, že takový způsob je velmi neohrabaný, ale má to jednu nespornou výhodu. Mezi oběma překlady lze soubor s obsahem editovat, a tak tam provést některé zajímavé (a třeba potřebné) úpravy. A pokud se překlad provádí na pomalejším stroji, není problém řádek s  \tableofcon­tents zakomentovat (komentář se provádí znakem %  (procento), vše za ním na řádku se ignoruje) a před finálním „dvojitým“ překladem jej stačí odkomentovat.

Jedno drobné doporučení: protože se obdobným způsobem řeší více problémů při sazbě (křížové odkazy, rejstřík, …), doporučuje se provést závěrečný překlad třikrát.

Čítače

Této problematice bude věnován zvláštní článek, ale nakousnout to můžeme již zde. A tak pro úplnost a dokreslení této kapitoly se dozvíme něco málo o čítačích (čítač je proměnná uchovávající číslo). Při členění textu do logických částí se používají tyto čítače:

Hodnotu čítače lze nastavit příkazem \setcounter (zde se setkáváme poprvé s příkazem, který má více než jeden povinný parametr), získat hodnotu čítače lze příkazem \the jméno_čítače (lze použít pouze pro čítače logických úrovní, nelze proto užít pro čítače secnumdepth nebo tocdepth). Tento příkaz pro zobrazení čítače formátuje uložené číslo, viz velký příklad níže. Z následujícího příkladu bude použití příkazů patrné:

\setcounter{section}{3}  % nastaví čítač na 3
\thesection              % vytiskne 3

Příklad

V uvedeném příkladu jsou všechny příkazy pro lepší přehlednost zvýrazněny. Z tohoto důvodu je také, i přes svoji délku, uveden kompletní.
\documentclass[11pt]{article}
\usepackage[latin2]{inputenc}
\usepackage{czech}
\usepackage{a4wide}

\begin{document}
\tableofcontents % vytvoří obsah podle souboru priklad.toc
\newpage % provede odstránkování

\section{Problematika}
V tomto textu se budeme věnovat tomu, kdy použít či nepoužít \LaTeX~pro
sazbu. Jaké z toho plynou výhody, nevýhody, případně obtížnosti.

\section[Obecný úvod]{Úvodem základní poznatky}

\subsection{\LaTeX~a silné nástroje pro sazbu}
\LaTeX~je určen pro profesionální sazbu a zvláště pro sazbu odborné
(technické) literatury. V tomto ohledu je to absolutní profesionál.

Není pouze na vás, jak bude vlastní dokument vypadat. Špatně se ovlivňuje
například velikost fontu použitého v nadpisech nebo vlastní podoba dokumentu. O
to, aby vše vypadalo pěkně, se postará samotný překladač. Dá textu vzhled,
který navrhli sami odborníci přes sazbu a měl by být dokonalý.

\subsection{WISIWIG editory}
Tyto editory nejsou určeny pro psaní knih a rozsáhlejších textů. Ano, lze to v
nich dělat, ale je to otázka nervů. Ale krátké texty, poznámky nebo letáky je
jednodušší vyrobit právě v nich. Proti nim hraje i nižší kvalita sazby, která
je dána nedostatkem času pro zpracování (u WISIWIG editoru nelze přece čekat
několik sekund, než se vám správně přeformátuje odstavec, to musí být hotovo
hned, tedy na první pokus, a tudíž na úkor kvality).

\section*{Malá polemika o editorech}
Používal jsem malý, jednoduchý editor a moc jsem si přál editor, který bude mít
spoustu tlačítek, bude se usmívat a dělat všechno za mě. Nejlépe kdyby mi četl
myšlenky. Přešel jsem k nejmenovanému editoru, který některé tyto "zázraky"
sliboval.

Mé prozření se dostavilo až s příchodem editoru, který se tvářil velmi
nepřátelsky a vlastně jsem jej nedokázal ani vypnout. Všichni asi tuší, potkal
jsem editor VIM.

\paragraph{Dobrý editor pro DOS}
Takovým pěkným, dobře sloužícím editorem je starý program T602. Sám jej
nepoužívám, avšak tento editor kdysi předběhl svou dobu a je velká škoda, že je
jím dnes opovrhováno. Jeho síla je hlavně v makrech, a pokud chcete stabilní a
rozumný textový editor, rozhodně jej vyzkoušejte. Je to lepší, než psát
dokumenty v nějakém souborovém manažeru.

\section{Závěr}
\subsubsection{Co lze tedy psát}
Rozsáhlejší práce technického charakteru jsou ideální. Ale pohodlně lze napsat
i netechnickou práci (je to vlastně lehčí, protože není potřeba takových
znalostí o \LaTeX u). Pokud píšete složitě strukturované texty (obrázky,
tabulky, speciální písma, ...), požadujete-li kvalitní tisk (např. na osvitovou
jednotku) nebo barevný výstup, měli byste rozhodně použít DTP nástroj.

\paragraph{Výhody}
\subparagraph{Výhoda první:}
Lze použít libovolný editor, tedy ten, co vám nejlépe vyhovuje a kterému plně
důvěřujete. A to je jedna z obrovských výhod, kterou neustále oceňuji.

\subparagraph{Výhoda druhá:}
Překladač má dostatek času, a tak si se sazbou může "hrát". Proto je jeho sazba
skoro vždy (problému, který nedokáže sám vyřešit, se občas nevyhne) tou
nejlepší.

\subparagraph{A mnoho dalších:}
Nespornou výhodou je možnost programování přímo v dokumentu, a je vhodný i pro
tisk rozsáhlých dat, jako jsou seznamy, jízdní řády apod. Samozřejmě by se
našlo mnoho dalších výhod, ale to poznáte časem.

\subsubsection{Doporučit nelze}
Pro kraťoučké texty typu poznámek nebo pro letáky, vizitky. Pokud se provádí
barevná sazba (časopis, noviny), měli byste rozhodně použít silný nástroj pro
sazbu, ale vyvinutý právě pro takový účel. V době vzniku \TeX u se
barevná sazba jen stěží někde objevila, a proto nemá takový rozsah příkazů pro
práci s ní. Z tohoto důvodu je zcela nevhodný pro texty typu časopisu. Ale
slyšel jsem, že časopis Bajt byl údajně psán v \TeX u.

\subsubsection*{A jinak?}
A jinak si můžete dělat co chcete, a tak si klidně vydávejte časopis.

\subsubsection{Další aspekty}
To, jestli byste měli nebo neměli použít  DTP (Desk Top Publishing) program,
byste měli rozhodnout s ohledem na časovou náročnost, čas života publikace
(seznam, co nakoupit v obchodě, má doslova jepičí život), kvalitu a množství
finálního výtisku a samozřejmě cenu.

\subsection{Závěrem}
Hodně štěstí a radosti z používání \LaTeX u přeje autor.

\newpage
\appendix

\section{Příloha věnovaná čítačům}
Hodnota čítače 'section' je nyní \thesection, pro čítač 'subsection' pak
\thesubsection.

\subsection{Poznámka}
Zde je hodnota čítače 'subsection' již na hodnotě \thesubsection. V námi
použitém stylu (article) je čítač 'part' nedefinovaný, a proto nevrátí žádnou
hodnotu: 'part'='\thepart'.

Po příkazu, který nastaví čítač 'part' na hodnotu 4,
\setcounter{part}{4} však danou hodnotu již můžeme tisknout:
'part'='\thepart'.

A jak to bude s čítačem 'subsection'? Nastavíme jej tedy třeba na hodnotu 8.
\setcounter{subsection}{8}

\subsection{Změněn čítač}
Výsledek je patrný, a tím by vše mělo být jasné. Vrtá vám hlavou číslo '9'? To
je tím, že tento čítač počítá od jedničky a nikoliv od nuly, jak se zdálo u
čítače 'part'. Čítač 'part' totiž není v tomto stylu definován, a proto se
chová jinak.

Při používání vestavěných čítačů je vždy potřeba odzkoušet, zda se chovají tak,
jak předpokládáme.

\end{document}

[tex|toc-1|toc-2|dvi-1|dvi-2|ps-1|ps-2]
[1.jpg|2.jpg|3­.jpg|4.jpg]
Výsledek je uveden ve dvojím provedením (po prvním a druhém překladu), screenshoty (dohromady mají asi 200 KB) jsou uvedeny pouze po druhém překladu.

root_podpora

V poněkud rozsáhlejším příkladu byl použit nám ještě neznámý příkaz \newpage, který odstránkovává text na další stranu (název příkazu mluví za vše). Na začátku příkladu je uveden příkaz \LaTeX bezprostředně následovaný znakem ~ (tildou, vlnovkou). Ta označuje tvrdou mezeru a v našem případě zabraňuje, aby následné slovo nebylo těsně přimknuto k výsledku příkazu \LaTeX.

Uvedený příklad obsahuje několik sazečských a estetických chyb, ale protože je ještě neumíme opravit (a vlastně je ani neznáme), zůstaly tam, časem se k nim určitě dostaneme.

Závěr

V příštím dílu si už na méně rozsáhlém příkladě vyzkoušíme formátování (zvýrazňování) textu a možná ještě něco navíc.

Byl pro vás článek přínosný?