Hlavní navigace

Jak na LaTeX: tabulky I

29. 8. 2001
Doba čtení: 7 minut

Sdílet

V dnešní teorii se podíváme na uložení fontů v počítači, ale v praxi se budeme věnovat tabulkám. Při této příležitosti zavítáme také do gastronomie. Nyní již nezbývá, než popřát dobré čtení a dobré pochutnání.

Teorie

V minulé teorii jsme se podívali na dělení fontů. Avšak nepadla zmínka o zásadním dělení fontů. Ty lze dělit nejen podle toho, jak vypadají (patkové, bezpatkové, atd.), ale i podle toho, jakým způsobem jsou uloženy v počítači. Abychom nezapomněli, co je to font, tak z minula jeho definice: „Font je kompletní sada písmen (včetně čísel, interpunkčních, diakritických a dalších znaků) jednoho typu písma a jednoho řezu o dané velikosti (tj. střední výšce písma).“

Bitmapové fonty

Dříve hojně používané, dnes spíše záležitost kompatibility (pokud vůbec) a historie. Bitmapové fonty (někdy označované jako rastrové) jsou vytvořeny tak, že v určitém rastru (lze si představit něco na způsob milimetrového papíru) jsou vybarvena jen některé políčka. Výsledný znak je tedy složen z několika desítek až stovek bodů. Ve své podstatě je font uložen na způsob klasického obrázku v samostatném souboru.

Tato koncepce má jedinou výhodu:

  • opravdu snadná práce a jednoduchost, která byla hlavním důvodem používání v minulosti.

Zato nevýhod je požehnaně:

  • velký počet různých výstupních zařízení (s různou rozlišovací schopností, nejčastěji monitor a tiskárna) vyžadoval, aby bylo nainstalováno velké množství různě jemných bitmap od jednoho fontu.
  • písmo se špatně zvětšovalo, proto byly potřeba další bitmapy pro různou výšku písma.
  • značná spotřeba místa (dnes to není moc podstatné, ale dříve to byl boj), protože čím větší font, tím větší soubor (některé bitmapy zabíraly i přes 0,5 MB).
  • celkově býval k dispozici malý počet písem v několika málo rozlišeních (většinou jen několik základních (Times a Helvetica) v nejčastěji používaných velikostech).

Vektorové fonty

Jsou založeny na jiném způsobu uložení. Jejich tvary jsou popsány křivkami a úsečkami. Pro vytvoření fontu je potřeba hlubších znalostí a nestačí jen „vymalovat“ čtverečky. Tento způsob byl poprvé použit již v roce 1985 v tiskárně s PostScriptem.

Jeho zásadní výhody:

  • tvar popsaný křivkami a úsečkami je do jisté míry univerzální a takový popis lze použít pro různě velká písma (stačí pouze zvětšit/zmenšit), samozřejmostí je získání písma v potřebném rozlišení.
  • v tom spočívá významné šetření místem a možnost mít uloženo až tisíce písem.

Nevýhod je opět více, ale jsou řešitelné:

  • z vektorového popisu známe obrysy písma, ale nevíme, jak jednotlivé znaky vybarvit. Proto se provádí rastrování (rastering, rendering), kterým vygenerujeme ve své podstatě bitmapový font v daném rozlišení a dané velikosti.
  • problém s vyplňováním (převodem obrysů na sadu zaplněných malých plošek) nastává u zařízení s nízkým rozlišením, kde je obtížné rozhodnout, zda určitou plošku vybarvit.
  • někdy zdánlivě jednoduchá operace vybarvení bodu uvnitř může zkolabovat. Jedná se hlavně o písmeno m, kde se stává, že jednotlivé nožičky jsou různě tlusté, což působí při čtení velmi rušivě.
  • pro vytvoření rastru je potřeba více času (musí se provést více operací než u bitmapového fontu).

Pro zkvalitnění (potlačení některých nevýhod) písma se používají tyto tři základní metody:

  • hinting – v popisu fontu jsou zahrnuty dodatečné informace pro renderování, pro malá písma zde mohou být uloženy i jednotlivé bitmapy.
  • smart outlines – při změnách velikosti se také mění tvar obrysu
  • antialiasing – představuje metodu, kterou se zahlazují zubaté okraje.

A jak je na tom TEX?

Pro kvalitní tisk jsou obě výše představené metody velmi děsné. Z tohoto důvodu se používá kompromis. Fonty jsou uloženy jako vektorové, ale zároveň v několika velikostech. Je to z důvodu, že font nelze libovolně zvětšovat, aniž by mu to uškodilo. Příklad bude mluvit asi za vše (oba uvedené řádky mají stejnou výšku, písma jsou stejného řezu ze stejné rodiny, jen byly navrženy pro různé velikosti):

ZVETSENI FONTU

Protože TEX je opravdu kvalitní nástroj a s renderováním jednotlivých fontů si hodně „hraje“, může mu zpracování dokumentu s mnoha fonty trvat i několik minut. Aby se tomu alespoň částečně předešlo, uchovává si vygenerované fonty v dočasných souborech. Odtud je při dalším překladu použije přímo. Po určité době nepoužívání budou soubory s bitmapovými fonty odstraněny.

Tabulky

Jako základní prostředí pro vytváření tabulek se v LaTeXu používá tabular. Existují i další prostředí, převážně určené pro sazbu rozsáhlých tabulek, ale na ty se podíváme někdy později.

Pro to, abychom tabulku vůbec mohli vytisknout, je potřeba použít prostředí tabular, zjednodušeně takto:

\begin{tabular}[vert_umístění]{sloupce}
  ...
\end{tabular}

Existuje ještě modifikace tohoto prostředí (kdepak jsme už hvězdičku použili?):

\begin{tabular*}{šířka}[vert_umístění]{sloupce}
  ...
\end{tabular*}

kde šířka určuje celkovou šířku prostředí pro tabulku. Příklad s tímto prostředím si ukážeme v dalším dílu, protože to není až tak triviální.

Nepovinný parametr vert_umístění určuje, jak má být zarovnán obsah buněk tabulky ve vertikálním směru. Implicitně je nastaveno centrování, pro změnu lze použít tyto dvě volby:

Tabulka č. 183
Parametr Popis
t zarovnání k horní části buňky (top).
b zarovnání dospod buňky (bottom).

Místo položky sloupce vložíme řetězec vytvořený z níže uvedených znaků. Tímto řetězcem oznámíme LaTeXu, jak má zpracovat jednotlivé sloupce:

Tabulka č. 184
Parametr Popis
l Vytvoří sloupec, jehož buňky budou zarovnány k levé straně.
r Sloupec s buňkami zarovnanými na pravou stranu.
c Tento sloupec bude mít buňky zarovnané na střed (centrovaně, vystředěně).
@{text} vytvoří sloupec, jehož každá buňka bude obsahovat text. V textu se může objevit příkaz \extracolsep{šířka}, který určuje pro následující sloupce levou mezeru o velikosti šířka. A to tak dlouho, dokud není použit \extracolsep s novou hodnotou. Šířku lze zadat v libovolných jednotkách (např.: 2.1cm, 1.5in, 20pt, …). Implicitní hodnota \extracolsep je 6pt.
p{šířka} vytvoří sloupec s buňkami, které mají danou šířku a text se do nich bude lámat (v buňkách budou řádkové zlomy). Ve výše uvedených typech sloupců zůstává text na jediné řádce.
*{počet}{sloupce} určuje počet opakování výrazu sloupce, který je definován stejným způsobem, jak je právě zde popisováno. Pokud potřebujeme mít stejnou definici pro více sloupců, nemusíme to opisovat, ale stačí říci, kolikrát se to má opakovat. Do proměnné počet lze použít pouze kladné číslo (nebo už někdo něco opakoval záporně?)
| znak pípy (nebo také svislítka) neurčuje žádný sloupec, slouží k oddělení jednotlivých sloupců tabulky, na jeho místě se vykreslí jedna svislá čára. Pokud uvedeme dvě vedle sebe, bude tam čára dvojitá atd.

Do prostoru prostředí (tam, co byly uvedeny tři tečky) se vpisují data. Přechod na nový řádek tabulky zajistíme příkazem ‚ \\‘ (dvě opačná lomítka). Jednotlivé sloupce se oddělují znakem ‚ &‘ (ampersand). Zde jsou uvedeny dva řádky z tabulky o třech sloupcích:

  první řádek s první & druhou & a třetí buňkou \\
  druhý řádek s první & druhou & a třetí buňkou \\

Jak je vidět, je to celé nějaké komplikované, proto si dnes ukážeme jeden příklad a v příštím dílu to doženeme několika dalšími. Všimněte si, jak se zapisuje řetězec popisující sloupce v položce sloupce (celé se to totiž seskládá do takového „nesmyslu“, který se sice špatně luští, ale časem prokouknete tu krásu, jednoduchost a hlavně rychlost vytvoření i složité tabulky).

CS24_early

\documentclass[11pt,titlepage]{article}
\usepackage[latin2]{inputenc}
\usepackage{a4wide}
\usepackage{czech}

\begin{document}
\subsection*{Úvodem}
Kurz vaření jsme na rootovi ještě neměli, ale vše je jednou
poprvé. Dnes tedy pod heslem: "Vaříme s~\LaTeX em."

\subsubsection*{Pro jazýček}
V~prvním receptu si dáme něco na zub:

\vskip 0.25cm % vytvoří vertikální mezeru
\begin{tabular}{lrll}
  hladká mouka  & 22  & dkg \\
  mléko         & 0,5 & l   \\
  mletý cukr    & 2   & dkg & mlsouni dají víc\\
  vejce         & 2   & ks  \\
  špetka soli   \\
\end{tabular}
\vskip 0.25cm % vytvoří vertikální mezeru

\noindent % zabrání odsazení nového odstavce
Půlhodiny ustát, smažit po obou stranách na středním
plameni. Výsledkem jsou chutné palačinky, které se
nepřilepí. Tip: pánev pro první palačinku vymastěte těsně
před vlitím těsta.

\subsubsection*{Do nožiček}
Dobré jídlo je potřeba zapít:

\vskip 0.25cm % vytvoří vertikální mezeru
\begin{tabular}{|l||c|}
  Andělika   & 1 g \\
  Yzop       & 3 g \\
  Wachta     & 1,5 g \\
  Zeměžluč   & 0,25 g \\
  Pelyněk    & 0,25 g \\
  Puškvorec  & 1 g \\
  Hřebíček   & 1 g \\
  cukr písek & 150 g \\
\end{tabular}

\vskip 0.25cm % malá vertikální mezera
\noindent     % zabrání odsazení odstavce
Naložit do 200-300~ml 40\%~lihu na týden. Pak filtrovat,
přidat cukr, doplnit 40\%~lihem do 1~litru a popíjet
tento nápoj, který je chuťově blízký becherovce. Tip:
bylinky lze koupit v~každém lepším obchodě s~bylinkami.

\subsection*{Závěrem}
Přeji dobrou chuť.
\end{document}

[tex|dvi|ps|j­pg]
V příkladu se objevilo několik „neznámých“ příkazů, jejich funkce je komentována přímo ve zdrojovém souboru.

Závěr

Příště zůstaneme u tabulek; protože jsme ještě některé věci neprobrali, ukážeme si víc příkladů pro použití a zkusíme vytvořit i složitější tabulku. V teorii se dostaneme k tématu pojednávajícím o jednotkách používaných v typografii a jejich zápisu v LaTeXu.

Seriál: Jak na LaTeX

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