V tomto díle se podíváme na formátování textu pomocí tabulek a boxů. Obojí budeme využívat v dalších dílech, např. pro sazbu chemických vzorců a rovnic.
Boxy
Box je část dokumentu, ke které se LaTeX chová jako by šlo o jediný znak. Box je definován třemi rozměry - výškou, šířkou a hloubkou. Známe tři typy boxů: LR boxy, parboxy a ruleboxy.
LR boxy
Jejich obsahem může být cokoliv. Známe čtyři typy LR boxů:
- \mbox{text} - vytvoří box tak široký, aby odpovídal jeho obsahu
- \fbox{text} - stejně jako mbox, ale box je ohraničen rámečkem
- \makebox[šířka][pozice]{text} - šířka boxu je dána hodnotou prvního argumentu. Druhý volitelný argument určuje, jak bude text v boxu umístěn, pokud není definován, text bude v boxu vycentrován. Přípustné hodnoty jsou:
- l - text bude zarovnán doleva
- r - text bude zarovnán doprava
- s - způsobí roztažení textu tak, aby vyplnil celý box
- \framebox[šířka][pozice]{text} - stejně jako makebox, ale box je ohraničen rámečkem
\framebox[3.5cm][l]{Framebox} - vytvoří orámovaný box, ve kterém bude text "Framebox" zarovnaný k levému okraji boxu. Pokud by byl text delší než je šířka boxu, dojde k jeho přetečení.
Podobného efektu jako s frameboxem můžeme dosáhnout pomocí prostředí framed (z balíčku framed).
K nastavení vertikálního posunu slouží \raisebox{vertikální-posun}[výška][hloubka]{text}. Pokud je hodnota vertikálního posunu kladná, box bude nad účařím, pro zápornou hodnotu bude pod účařím.
Parbox a minipage
LR boxy neumožňují vkládání celých odstavců a řádkových zlomů, k tomu musíme využít buď parbox nebo prostředí minipage.
Někdy je potřeba vložit na několik míst stejný text, k tomu lze použít savebox. Definuje se a používá tímto způsobem:
%inicializace
\newsavebox{\test}
%vložení textu do saveboxu
\sbox{\test}{Tento text se objeví všude, kde odkážeme na savebox.}
%použití
\usebox{\test}
Tabbing
Pro ty, kteří si ještě pamatují psací stroje, lze prostředí tabbing přirovnat k tabelačním zarážkám. Tímto způsobem lze jednoduše vytvořit zarovnané sloupce čísel nebo údajů. Zarážky se nastavují pomocí \= a řádek se ukončuje sekvencí \\. Po nastavení zarážek je můžeme používat pomocí \>.
Pokud potřebujeme změnit výšku řádku, napíšeme ji za konec řádku do hranatých závorek.
\begin{tabbing} Látka\qquad \=Skupenství\qquad \=Popis\\[0.5em] Voda\> kapalina \> bez chuti, bez zápachu\\ Brom \> kapalina \> červenohnědý, dýmavý, vysoce toxický\\ \end{tabbing}
Prostředí tabbing zvládá i složitější úkoly, lze například uložit pozici zarážek (\pushtabs), zrušit je a následně obnovit (\poptabs).
\begin{tabbing} Látka\qquad \=Skupenství\qquad \=Popis\\ Voda\> kapalina \> bez chuti, bez zápachu\\ \pushtabs Test textu v prostředí tabbing\\ \poptabs Brom \> kapalina \> červenohnědý, dýmavý, vysoce toxický\\ \end{tabbing}
Tabulky
Složitější a také pěknější tabulky lze vytvořit pomocí dvou prostředí: tabular a tabular*.
Prostředí tabular je základem pro tvoření tabulek. Jeho povinným argumentem je specifikace sloupců, v nejjednodušším případě jde o jejich zarovnání, které zvolíme pomocí písmen l, r nebo c. obsah jednotlivých buněk oddělujeme pomocí symbolu & a konce řádků příkazem \\. Pokud chceme mít buňky oddělené svislou čarou, vložíme mezi typy sloupců znak |. Pro ohraničení řádku se používá \hline. Pokud chceme vložit čáru pouze pod některé buňky, použijeme příkaz \cline{a-b}, kde místo a a b vložíme rozsah buněk, které mají být ohraničeny. V případě, že potřebujeme do buňky vložit vertikální čáru (rozdělit buňku) použijeme příkaz \vline.
Někdy je užitečné mít možnost nadefinovat tloušťku horizontálních čar, to umožňuje balíček booktabs, který definuje tři nové příkazy: \toprule, \midrule a \bottomrule. K čemu slouží se dá odhadnout z názvu, nejdůležitějším přínosem těchto příkazů je možnost zadat přímo tloušťku dané čáry.
Pokud předpokládáme, že bude obsahem buněk delší text, nebude nám specifikace pomocí zarovnání stačit, v tomto případě totiž nedochází k zalomení textu a tabulka může přesáhnout okraj stránky. Vhodným type sloupce je v tomto případě p, u kterého musíme uvést požadovanou šířku. Pokud chceme deklarovat více sloupců stejného typu, můžeme použít zkrácený zápis, např. cccccc, zapíšeme jako *{c}{6}.
Každá buňka v tabulce se chová jako skupina, pokud změníme její styl, změna se aplikuje pouze na danou buňku a nešíří se dál v tabulce.
\documentclass{article} \usepackage{booktabs} ... \begin{document} \begin{tabular}{crp{3cm}} \toprule[1.5pt] Látka & Skupenství & Popis\\ \midrule Voda & \textbf{kapalina} & bez chuti, bez zápachu\\ Brom & kapalina & červenohnědý, dýmavý, vysoce toxický\\ \bottomrule[1.5pt] \end{tabular} \end{document}
Ohraničení tabulky je v našich příkladech velice blízko obsahu buňky. Vnitřní okraje buněk tabulky můžeme zvětšit pomocí proměnné \extrarowheight{výška}. Hodnota této proměnné bude přičtena k výšce každého řádku tabulky. Jeho hodnotu zadáváme v preambuli dokumentu.
\documentclass{article} \setlength{\extrarowheight}{2pt} \begin{document} ... \end{document}
Častým úkolem je zarovnání čísel ve sloupci na desetinnou čárku. K tomu slouží zápis @{,}, tím vložíme desetinnou čárku mezi dané sloupce a zároveň dojde ke zrušení mezer mezi sloupci. Tímto způsobem lze i zrušit mezeru mezi buňkami, použijeme @{}.
\begin{tabular}{|l@{,}r|} \hline 5 & 3\\ \hline 15 & 42\\ \hline 1 & 0\\ \hline 458 & 7\\ \hline 15 & 9\\ \hline \end{tabular}
Pokud bychom chtěli předchozí tabulku doplnit o hlavičku, narazíme na problém, jak spojit tři sloupce do jednoho. K tomu slouží příkaz \multicolumn, který má tři argumenty. První je počet sloupců, který budeme slučovat, druhý zarovnání textu v buňce vzniklé slučováním a poslední, obsah buňky.
Slučování řádků se provádí pomocí balíčku multirow (je nutné ho zadefinovat v preambuli pomocí \usepackage). Jeho použití je velmi podobné příkazu \multicolumn. Má tři parametry: 1) počet řádků, 2) šířku sloupce (lze použít *, kterou přenecháme nastavení šířky sloupce na LaTeXu) a 3) obsah vytvořené buňky.
\usepackage{multirow} ... \begin{tabular}{|l@{,}r|} Items & \multicolumn{2}{|c|}{\textbf{Index}}\\ \hline \multirow{2}{*}{Item 1} & 5 & 3\\ \cline{2-3} & 15 & 42\\ \hline \multirow{2}{*}{Item 2} & 1 & 0\\ \cline{2-3} & 458 & 7\\ \hline \end{tabular}
Prostředí tabular* je rozšířením tabular. Umožňuje tabulce nadefinovat šířku. Osobně doporučuji používat k tomuto účelu spíše prostředí tabularx nebo tabulary, na které se podíváme o kousek dál.
Plovoucí tabulky
Tabulky LaTeX vysází na tom místě, kde jsou ve zdrojovém kódu zapsána. Pokud chceme dosáhnout profesionálního vzhledu, můžeme využít pozicování tabulek. Toho dosáhneme umístěním prostředí tabular do prostředí table.
\begin{table}[pozice] \begin{tabular}{|l|} ... \end{tabular} \end{table}
Popisek tabulky
Pokud je tabulka součástí většího textu, tak je nutné ji přiřadit číslo, popisek a mít možnost na ni z textu odkazovat. Jak toto provést si ukážeme v některém z dalších dílů, zde jen zmíním tvorbu klasického popisku pomocí příkazu \caption[krátký popisek]{dlouhý popisek}. Příkaz přiřadí tabulce její číslo podle pořadí v textu a pod tabulkou zobrazí obsah povinného argumentu. Pokud je zadán i nepovinný argument, bude zobrazen v seznamu tabulek (pokud jej budeme sázet). Tabulka musí být vytvořena pomocí prostředí table, pokud používáme např. tabular, musíme ho zabalit do table.
\begin{table} %Tabulku vycentrujeme \centering \caption[Data]{Data vycucaná z palce} \begin{tabular}{|c|r@{,}l|} \hline Items & \multicolumn{2}{|c|}{\textbf{Index}}\\ \hline \multirow{2}{*}{Item 1} & 5 & 3\\ \cline{2-3} & 15 & 42\\ \hline \multirow{2}{*}{Item 2} & 1 & 0\\ \cline{2-3} & 458 & 7\\ \hline \end{tabular} \end{table}
Tabularx
Pokud potřebujeme tabulce nastavit přesnou šířku, je možné využít balíček tabularx, jeho použití je snadné a výhodnější než využití velmi podobného prostředí tabular*. Zavádí další typ sloupce X, který převede na sloupec p{x}, kde šířka x bude vypočítána na základě požadované šířky tabulky. Tato vlastnost se dá ilustrovat těmito dvěma příklady.
\begin{tabularx}{250pt}{|c|X|c|X|}
\begin{tabularx}{350pt}{|c|X|c|X|}
Nevýhodou prostředí tabularx je možný konflikt s některým konstrukcemi TeXu a také je pomalejší než tabular*.
V článku jsme prošli základní možnosti vytváření a úpravy boxů a tabulek v LaTeXu.