Hlavní navigace

Jak na LaTeX: tabulky II

Michal Švamberg 6. 9. 2001

Z minulého dílu již víte, co vás čeká. Pro ty, co to zapomněli (nebo jej nečetli), podíváme se za jednotkami a čísly používanými v LaTeXu a doděláme prostředí tabular z minulého dílu.

Teorie

V TeXu lze různé věci dělat různým způsobem a čísla nejsou výjimkou. Pro jejich zápis můžete použít nejrůznějších způsobů. Snad kompletní popis možností je uveden v tabulce níže (jeden z příkladů na tabulky).

S jednotkami už to tak jednoduché a krátké nebude. Za číslem udávajícím rozměr musí být uvedena jednotka. Tabulka používaných jednotek v LaTeXu je také uvedena v některém z příkladů na tabulky.

V našich podnebných šířkách (a tam, kde používají metrickou soustavu) se zřejmě nejčastěji bude jednat o jednotky pt  (monotypový bod), cm  (centimetr) a  mm  (milimetr). Následující krátký příklad vytvoří vždy stejnou úsečku (linku), a to jeden milimetr širokou a 12 bodů vysokou (k tomuto účelu je použit příkaz  \rule):

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

\begin{document}
\rule{ ,1 cm}{    "C pt} % hexadecimálně (12 dekadicky)
\rule{1.0mm }{     1pc}
\rule{1.mm  }{786432.sp}
\rule{1,mm  }{      .166044in}
\rule{1, mm }{     4,21752 mm}
\end{document}

Výřez z výsledku je poněkud monotónní: ZPŮSOBY ZÁPISU

[tex|dvi|ps]

A co používá TeX? Profesor Donald E. Knuth (zakladatel a stvořitel TeXu) zapracoval do TeXu velmi zvláštní jednotku ( sp  - scaled point). Její velikost je 216 (65536) krát menší než  pt. Je to hodnota přibližně 5,36 nanometru, což je ještě asi 100 krát méně, než je vlnová délka světla (ta je přibližně 380–780 nm, přičemž lidské oko je nejvíce citlivé na rozmezí 500–550 nm). Jednotka sp je již dostatečně jemná a do ještě větší jemnosti se nemá smysl zanořovat. V tomto ohledu je TeX asi jediný nástroj připravený na dobu, kdy se na trhu vyskytnou opravdu kvalitní tiskárny (s rozlišením vlnové délky viditelného světla :).

Problém nastal, když chtěli dokument s takovou přesností uložit. Nic podobněho do té doby neexistovalo, a tak vytvořili formát DVI (DeVice Independent). K tomu se přidalo několik prográmků (nám je již známý dvips), které převádí soubor z DVI formátu na nějaký jiný (PostScript, PDF). Tím je zajištěna maximální kvalita výsledného dokumentu, protože si z kvalitního a nezávislého DVI můžeme vygenerovat výstup s takovým rozlišením, jaké vyžaduje naše výstupní zařízení.

Tabulky – pokračování

Než začneme vytvářet opravdu pěkné tabulky, musíme se ještě naučit několik nových příkazů:

Tabulka č. 188
Příkaz Popis
\hline vytvoří vodorovnou (horizontální) linku přes celou šířku tabulky, pokud chceme vytvořit dvojitou, dáme dva tyto příkazy za sebe atd.
\cline{i-j} také vykreslí horizontální linku, ale tentokrát od sloupce i až do sloupce j (první sloupec je označen jako „1“, tedy takovým tím lidštějším způsobem a nikoliv Céčkovsky, tím nechci nikoho urážet :)
\multicolumn{sloupců}{zarovnání}{text}
  dokáže spojit několik sloupců v jeden a vytvořit tak jednu buňku přes více sloupců. Položka sloupců určuje počet po sobě následujících sloupců (včetně aktuálního), které se budou spojovat. Na obsah buňky uložený v text lze použít zarovnání centrovaně nebo k levé či pravé straně (lze vkládat i znak ‚|‘ pro vytvoření svislé čáry, viz níže). Do položky zarovnání tak vložíme jedno z písmen c, l, r podle toho, jak chceme obsažený text zarovnat.
\vline vertikální linka, vykreslí se přes celou výšku daného řádku.

Nyní, se znalostmi všeho okolo tabulek, je začneme vytvářet. Příkazy týkající se tabulky jsou opět zvýrazněny polotučným řezem. Části zvláště zajímavé jsou vyznačeny červeně. Na začátek jednoduchý příklad:

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

\begin{document}
\begin{tabular}{|l|p{10cm}|}
  \hline
  {\bf Zápis} & {\bf Popis} \\
  \hline \hline
  628         & posloupnost cifer označuje celé číslo \\
  3.22        & desetinné číslo s~tečkou jako oddělovačem
                (snad by šlo pojmenovat jako americký tvar) \\
  3,22        & desetinné číslo v~evropském tvaru \\
  3.          & desetinné číslo s~nulovou desetinnou částí
                (výsledek~=~3,0), jako oddělovač lze použít také čárku\\
  .22         & desetinné číslo s~nulovou celou částí (výsledek~=~0,22),
                jako oddělovač lze použít také čárku \\
  "A2         & šestnáctkový (hexadecimální) zápis čísla (nelze říct, že
                by se to často používalo) \\
  \hline
\end{tabular}
\end{document}

ZÁPIS ČÍSEL

[tex|dvi|ps]

V definici tabulky je druhý sloupec nastaven na velikost 10 cm (tento a všechny další obrázky jsou zvětšeny 1,4 krát pro lepší čitelnost), proto se text přesahující tuto délku nalámal na více řádků. Všimněte si, že nezáleží na tom, jak je text nalámán ve zdrojovém souboru. TeX má prostě svoji hlavu :)

Teď už si můžeme dovolit i složitější tabulku:

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

\begin{document}
\begin{tabular}{|l||l|l|l|}

\hline
  {\bf Zápis} & {\bf Název} &
       \multicolumn{2}{c}{\bf Vyjádřeno jinak pro hodnotu 1} \\
\cline{3-4}
              &         & Přesně       & Nepřesně \\
\hline
\hline
  pt & monotypový bod   & 1/72,27 in   & 0,35146 mm;
                                         0,93457 dd \\
  pc & pica             & 12 pt        & 4,21752 mm \\
  bp & počítačový bod   & 1/72 in      & 0,35278 mm \\
  dd & Didotův bod      & 1238/1157 pt & 0,376 mm;
                                         1,07 pt \\
  cc & Cicero           & 12 dd        & 4,512 mm \\
  in & palec, coul      & 72,27 pt;
                          25,4 mm      & \\
  cm & centimetr        & 10 mm        & 28,4528 pt \\
  mm & milimetr         & 1/25,4 in    & 2,84528 pt;
                                         2,6591 dd \\
  sp & přesnost \TeX u  & 1/65536 =
                          $2^{-16}$ pt & $5,36\cdot10^{-9}$ m\\
\cline{3-4}
  em & velikost písma   &
       \multicolumn{2}{l}{výška používaného písma} \vline \\
  ex & výška malého "x" &
       \multicolumn{2}{l|}{aktuální výška malého písmene "x"}\\
\hline

\end{tabular}
\end{document}

POUŽÍVANÉ JEDNOTKY

[tex|dvi|ps]

Z celé tabulky je asi nejzajímavější pravý horní roh, kde „chybí“ kousek svislé čáry. To je způsobeno příkazem \multicolumn, kterým jsme vytvořili novou buňku a překryli tím nastavení buněk standardních. Při vytváření této nové buňky jsme už ale pozapomněli na dotištění pravé linky. To je možné provést způsoby, které jsou ukázány na těch „spodních“ multicolumnech.

Proč TeX vykreslil levou čáru? Lze si představit, že oddělovač sloupců (znak ‚&‘ nebo na konci ‚\\‘) se vždy váže k nastavení předchozí buňky. A podle tohoto nastavení se na jeho místo vpisuje svislá čára. Pokud je předchozí buňka vytvořena jako \multicolumn a není v ní definována svislá čára, tak se ani nevypíše. Malý příklad:

\begin{tabular}{|*{3}{l|}}
  buňka 1 &                      buňka 2  & buňka 3 \\
  buňka 1 & \multicolumn{1}{ l }{buňka 2} & buňka 3 \\
  buňka 1 & \multicolumn{1}{|l }{buňka 2} & buňka 3 \\
  buňka 1 & \multicolumn{1}{ l|}{buňka 2} & buňka 3 \\
  buňka 1 & \multicolumn{1}{|l|}{buňka 2} & buňka 3 \\
\end{tabular}

MULTICOLUMN

[tex|dvi|ps]

Pro úplné využití příkladu je červeně vyznačena možnost opakování stejných výrazů v definičním řetězci tabulky. Zde to nemá moc smysl, protože výsledek celého řetězce je |l|l|l|, ale kdo by to chtěl dělat pro tabulku s dvaceti sloupci.

V minulém dílu jsem slíbil příklad k „hvězdičkové“ verzi tabulky:

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

\begin{document}
\begin{center}
\rule{\textwidth}{0.5mm}
\vskip 0.5cm
\begin{tabular*}{0.90\textwidth}{@{\extracolsep{\fill}}lp{6cm}c}
  \bf Příkaz            & \bf Popis                   & X \\
\hline
  \tt \verb|\textwidth| & Vrací délku řádky.          & x \\
  \tt \verb|\fill|      & Pružná horizontální mezera, chová se
                          tak, že vyplní, co se dá.    & x \\
  \tt \verb|\|verb      & Vše mezi uvozovacími znaky se
                          považuje za text a neinterpretuje se.
                                                      & x \\
\end{tabular*}
\end{center}
\end{document}

HVĚZDIČKOVÝ TABULAR

[tex|dvi|ps]

První linka (ta tlustější) je roztáhnutá přes celou šířku stránky (přesněji přes délku řádky). Je tam z toho důvodu, aby bylo vidět, že tabulka má opravdu velikost 90 procent šířky. Jak je popsáno v příkladu, příkaz \fill vyplňuje obsah mezi sloupci právě tak, aby se tabulka mohla pěkně roztáhnout. Poslední sloupec označený jako ‚X‘ byl uveden z důvodů názornosti a nemá praktický význam - na dvou sloupcích to vypadalo, jako by se nic nestalo.

Sekvence @{} v definičním řetězci se častěji používá pro zarovnání čísel na desetinnou čárku:

\begin{tabular}{c|r@{,}l}
    Proměnná & \multicolumn{2}{c}{Hodnota} \\
  \hline
    x        & 4    & 26455 \\
    y        & 0    & 1 \\
    z        & 1256 & 23 \\
\end{tabular}

ZAROVNÁNÍ

[tex|dvi|ps]

Přestože pozice parametru @{,} říká, že se má mezi druhým a třetím sloupcem vypsat čárka, v prvním řádku se tomu nestalo. Důvod je ten, že \multicolumn překryl druhou a třetí buňku novou, tím také překryl desetinnou čárku.

Několik poznámek

Tabulka se chová jako součást řádku, proto se vám může stát, že výsledek nebude zrovna odpovídat vaší představě. Pokud je před začátkem tabulky uveden prázdný řádek, je považován za začátek odstavce, a proto bude tabulka odražena. Abyste si udělali představu, jakým způsobem to LaTeX vysází, představte si tabulku jako samostatné písmeno – a právě tímto způsobem LaTeX k tabulce přistoupí a naformátuje ji.

Z tohoto důvodu byly v minulém dílu uvedeny dva příkazy:

Tabulka č. 189
Příkaz Popis
\noindent jenž zabránil odsazení odstavce (a zároveň tabulky)
\vskip výška který vložil vertikální mezeru o velikosti výška, pro vertikální odskočení lze také použít příkaz \vspace{výška}, ale o tom někdy jindy.

O tom, jak lépe umístit a vysázet tabulku, se dozvíte v příštím dílu.

Závěr

Tím bychom měli probrány tabulky. V dalších dílech se s nimi ještě setkáme, takže nabyté vědomosti budeme pomaličku utvrzovat, abychom je nezabili. K tabulkám patří neodmyslitelně plovoucí prostředí a právě této problematice bude věnován další díl. Do teorie si určitě něco pěkného připravím, nechte se překvapit.

Našli jste v článku chybu?

7. 9. 2001 23:05

Pavel Satrapa (neregistrovaný)

Tak schválně zkuste s HTML+CSS vysázet nějaký matematický vzorec - třeba něco s odmocninou nebo vodorovnou zlomkovou čárou. Srovnáváte nesrovnatelné. (La)TeX je na kvalitní papírovou typografii. HTML má jiné cíle a ani s nejnovějšími vymoženostmi nezaručuje (a ani si to neklade za cíl), že zobrazená stránka bude vypadat přesně tak, jak si autor přál.

7. 6. 2008 22:36

Hehe... 2008 a stále se používá. Já v něm zrovna vysázel bakalářskou práci.
120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

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

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

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č?

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Lupa.cz: Není sleva jako sleva. Jak obchodům nenaletět?

Není sleva jako sleva. Jak obchodům nenaletět?

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

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: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí