Předchozí   Další   Dolů   Obsah 

O) Boxy

Práce s boxy umožňuje uživateli LaTeXu vytvořit prakticky cokoliv (např. tabulku, uvnitř které jsou některé položky pootočené o např. 90 stupňů a umístěny i nějaké obrázky)!

TeX funguje tak, že si vytvoří "notovou osnovu" - linky (tzv. účaří) pod sebou a na ně pak umisťuje tzv. boxy (obdélníky). Vlastně i každý jednotlivý znak je takový malý box. Ve fázi umisťování boxu na linky (na účaří) se TeX nezajímá o vnitřní strukturu boxu - zajímají ho jen rozměry, aby mohl boxy správně umisťovat - rozteče mezi linkami "notové osnovy", rozteče mezi boxy v horizontálním směru. Obsahem boxu (s výjimkou tzv. rule boxu) může být cokoliv - např. obrázek. TeX automaticky umisťuje boxy horizontálně za sebou, nenastává-li zlom řádku nebo není-li explicitně požádán, aby tak nečinil. Každý box má svůj tzv. referenční bod, jeho umístění vzhledem k hranicím boxu je dáno typem boxu a někdy je také uživatelsky ovlivnitelné. TeX umisťuje box tak, aby referenční bod ležel na účaří (lince "notové osnovy"). LaTeX obsahuje uživatelské příkazy dovolující vytvářet větší a složitější boxy z jednodusších a menších (typicky např. ze znaků) - tvořit boxy (ruleboxy, LR boxy nebo parboxy).

  1. rule boxy: jsou černé obdélníčky a vytvoří se příkazem \rule[zvýšení]{šířka}{výška} - příkaz umístí do textu černý obdélník (kromě případu, kdy je použit pouze jako parametr příkazu settowidth nebo settoheigth nebo settodepth), zvýšení je y-nová souřadnice dolního okraje boxu a referenčního bodu - kladná hodnota tedy způsobí posunutí boxu nad účaří. Šířka nebo výška může být i nulová - vznikne tak neviditelná čára - tzv. strut. Čára sice není vidět, ale LaTeX s ní počítá - dá se to použít např. na zvětšení buňky tabulky, pokud by jinak hranice buňky obklopovaly položku příliš těsně.
  2. LR boxy: obsahem může být cokoliv a vytvoří se příkazem \makebox[velikost][umístění obsahu]{obsah} - příkaz umístí do textu box vytvořený ze "zřetězení" položek obsahu obsah (kromě případu, kdy je použit pouze jako parametr příkazu settowidth nebo settoheigth nebo settodepth). Pokud je obsah např. normální věta tvořená posloupností písmen a mezer, vytvoří příkaz jeden box v podobě oné věty. Přitom se neprovádí automatické zalamování, ani se nerespektují případné znaky nový řádek. Volitelný parametr velikost dovoluje ovlivnit velikost boxu, pokud není uveden volí se rozměry automaticky co nejmenší dostatečné na to, aby se obsah do nich vešel (defaultní rozměry). Při explicitním určení velikosti se dají využít symboly \height, \depth, \totalheight, \width znamenající defaultní rozměry. Parametr umístění obsahu může být l nebo r nebo s (stretch - rozptýlení obsahu na celou šířku boxu). V případě, že volitelné parametry nepotřebujeme, můžeme psát zkráceně \mbox{obsah}.

    \framebox je příkaz se stejnými parametry a stejným významem jako příkaz \makebox až na to, že obsah boxu je navíc orámován. Síla orámování je ovlivnitelná registrem \fboxrule (implicitně je 0.4 pt). Registr \fboxsep určuje minimální vzdálennost okrajů boxu od jeho obsahu.

    Poznámka: tyto příkazy - \makebox a \framebox se jmenují stejně jako obdobné příkazy z prostředí picture. Parametry se však trochu liší.

  3. parboxy: obsahem může být cokoliv jako u LR boxu, navíc však funguje automatické zalamování řádků na pravém okraji boxu. Vytvoří se příkazem: \parbox[vertikální umístění][výška][umístění obsahu]{šířka}{obsah} - to samé jako u LR boxu s výjímkou automatického zalamování řádků. Protože funguje automatické zalamování řádků, musí se předepsat šířka. Parametr výška určuje prostě výšku boxu. Referenční bod je zhruba v jedné polovině boxu. Parametr vertikální umístění (může být buď t nebo b nebo c - implicitně je c) ovlivňuje vertikální umístění obsahu boxu v jeho rámci a znamená buď to, že refereční bod prvního (t) nebo posledního (b) řádku vnitřních boxů ( myslí se ref. bod boxů, které řádek tvoří ) je ve stejné výšce jako referenční bod celého boxu (parboxu). Pokud je uvedeno c, pak jsou vnitřní boxy rozmístěny tak, aby střed soustavy řádků, které boxy tvoří, byl stejně vysoko jako referenční bod celého boxu. Dále je samozřejmě možné ovlivňovat vertikální umístění pomocí příkazu \vspace uvnitř obsahu boxu.
Dále jsou pro práci s boxy užitečné příkazy:
\savebox{\jménoboxu}[šířka][pozice]{obsah} - vytváří box z obsahu a ukládá ho do \jménoboxu, pozice může být buď r nebo l nebo s (existuje ještě velmi podobný příkaz stejného jména, který je určen hlavně pro prostředí picture - je popsán v kapitole
Prostředí picture). Jméno boxu musí být před tím deklarováno příkazem:
\newsavebox{\jménoboxu} (např. \newsavebox{\krabicka}).
\usebox{\jménoboxu} - funguje jako \makebox pro posloupnost příkazů vytvořených pomocí příkazu \savebox a odkazovaných pomocí jménoboxu.

\raisebox{posun}[výška][hloubka]{objekt} - posune polohu referenčního bodu objektu (a tím i celý objekt) o posun nad účaří (posun může být i záporný). Normálně leží referenční bod na účaří - tento příkaz dovoluje toto pravidlo porušit. Je možné zadat ještě výšku a hloubku. LaTeX pak pro rozhodování o rozteči mezi řádky nebude přihlížet ke skutečným rozměrům boxu, ale k těmto fiktivnim - tím můžeme dosáhnout překryvu boxů.

Následující příklad je makro umisťující na levý okraj libovolný objekt (text, tabulku nebo obrázek) a napravo od něj popis vzdálený o velikost udanou druhým parametrem. Popis je umístěn do takové výšky, aby jeho spodní okraj ležel ve výšce spodního okraje objektu.
Předpokládá se, že jsou zavedeny délkové registry \sirkaobj, \zbytek a \ucari - pomocí příkazu \newlength a že je použit balík czech a graphics.

    \newcommand{\objspopisem}[3]{ % definice příkazu
    \settowidth{\sirkaobj}{\makebox{#1}} % získání šířky objektu
    \noindent\makebox{#1}\hspace*{\fill}
    \zbytek=\linewidth
    \addtolength{\zbytek}{-\sirkaobj}
    \addtolength{\zbytek}{-#2}% výpočet volného místa
    \settodepth{\ucari}{\makebox{#1}}
    \raisebox{-\ucari}{\parbox[b]{\zbytek}{\footnotesize #3}}
    }
Příklad použití příkazu:
    \newsavebox{\obrazek}        % vytvoření boxu
    \savebox{\obrazek}{          % uložení obrázku do boxu
    \scalebox{0.2}{
    \includegraphics*[0mm,30mm][220mm,250mm]{obrpr.ps}
    }
    }

    \objspopisem{\usebox{\obrazek}}{2em}{\textbf{Obr. 1.} Tento popis se týká obrázku
    nalevo a ilustruje, jak lze snadno vytvořit vhodně umístěný popis napravo.}
Jiný častý uzitečný případ je použití tabulky vytvořené pomocí prostředí tabular místo obrázku.


 Předchozí   Další   Nahoru   Obsah