Plnotučné tabulky v LaTeXu s balíkem tabularray

14. 3. 2023
Doba čtení: 17 minut

Sdílet

 Autor: Pavel Satrapa
S tabulkami to v typografickém programu LaTeX nikdy nebylo snadné. Nedávno ale do města přijel nový šerif, balík tabularray, který má mimořádně rychlou ruku na spoušti. Pojďme se podívat, co dovede a jak se s ním pracuje.

Omezení klasických tabulek

Co se dozvíte v článku
  1. Omezení klasických tabulek
  2. Začínáme s tabularray
  3. Úpravy vzhledu
  4. Rozměry a nepravidelnosti
  5. Barvy a čáry
  6. Dlouhé tabulky
  7. Sériová výroba
  8. A to není všechno

Prostředí tabular (v matematickém režimu array), kterým se v LaTeXu sázejí tabulky, má celou řadu omezení. Tabulka se musí vejít na stránku, máme omezené možnosti zarovnávání a roztahování buněk a tak dále. Důsledkem je existence dlouhé řady balíků, které doplňují tu či onu vlastnost. Zasahují různými způsoby do vnitřních mechanismů, takže se často nesnesou mezi sebou a musíte volit, které rozšíření potřebujete víc.

O standardním vytváření tabulek v LaTeXu si přečtěte v článcích Jak na LaTeX: tabulky I a Jak na LaTeX: tabulky II.

Začínáme s tabularray

Nový balík tabularray nabízí „vše v jednom“. Přichází s novou implementací tabulek, jejíž schopnosti pokrývají několik oblíbených balíků. Díky tomu si můžete zadivočit, aniž byste potřebovali další nástroje.

Prostředí, které pro tabulky zavádí, se jmenuje tblr. Kombinuje v sobě písmena z původních názvů tabular a array a naznačuje tak první dobrou zprávu: lze je použít v textovém i v matematickém režimu. Jeden tblr vládne všem!

Na ni hned navazuje druhá dobrá zpráva: je zpětně kompatibilní. Nahradíte-li název původního prostředí tabular novým tblr a zbytek kódu zachováte, bude výsledek skoro stejný. Proč jen skoro? Protože původní tabulky jsou svisle dost nahuštěné, tblr sází řádky poněkud volněji. Tady vidíte porovnání vzhledu tabular (vlevo) a tblr (vpravo).

Zdrojový kód k obrázku vypadal takto:

\begin{tabular}{lrr}
Prodejna & Leden & Únor \\
Pražská & 178\,253 & 92\,519 \\
Lesní & 292\,356 & 231\,485 \\
\end{tabular}
\qquad
\begin{tblr}{lrr}
Prodejna & Leden & Únor \\
Pražská & 178\,253 & 92\,519 \\
Lesní & 292\,356 & 231\,485 \\
\end{tblr}

Řekněme, že některá prodejna má dlouhý název, který chceme rozdělit do více řádků. To standardně není úplně jednoduché, zato v tblr  ano. Stačí uzavřít obsah buňky do složených závorek a uvnitř pak použít obvyklé příkazy pro odřádkování  \\. Díky obklopujícím složeným závorkám nebudou interpretovány jako konec řádku tabulky, ale konec řádku uvnitř buňky. Přidejme řádek:

{ Nad lesním \\ koupalištěm } & 135\,462 & 167\,208 \\

a dostaneme:

Úpravy vzhledu

Jak vidíte, implicitně se obsah buněk v řádku zarovnává podle prvního řádku jejich obsahu. Lze to samozřejmě změnit, ale nejprve se musíme podívat, jaké nástroje pro úpravu tabulek balík nabízí. K dispozici jsou dvě základní rozhraní:

  • Staré rozhraní je tvořeno příkazy, které se zapisují do těla tabulky. Například kdybych chtěl nově přidaný řádek svisle zarovnat na střed, přidal bych na jeho začátek  \SetRow{m}.
  • Nové rozhraní tvoří dvojice parametr=hodnota zapisované do argumentu začátku prostředí tblr. Autor balíku opakovaně vyzdvihuje, že nové rozhraní oděluje definici vzhledu tabulky od jejího obsahu.

Můžete je samozřejmě kombinovat. Obecně doporučujeme definovat podobu tabulky pomocí nového rozhraní, tedy parametrů na jejím začátku. Jemu se v článku budeme věnovat přednostně. Příkazy starého rozhraní se mohou hodit pro mimořádné případy. Chcete-li zvýraznit konkrétní buňku nebo řádek uprostřed tabulky, bude jednodušší použít \SetCell nebo \SetRow, než počítat jejich indexy (a riskovat, že se úpravou tabulky změní).

Při nastavování vlastností lze pracovat s řádky ( row, rows), sloupci ( column, columns) i buňkami ( cell, cells). Množné číslo se používá pro nastavení všech, k jednotnému se připojují indexy, kterých se dotyčná vlastnost týká. Například svislé zarovnání na střed chci jednotně v celé tabulce, má proto logiku nastavit je pro všechny buňky:  cells={m}.

Balík nám zjednodušuje život a umožňuje zkrácený zápis některých vlastností. Použitá hodnota m se týká svislého zarovnání. Čili v úplném tvaru by definice měla vypadat cells={valign=m}. Jednu takovou zkratku už jsme použili. Definice zarovnání sloupců tabulky je ve skutečnosti hodnotou parametru  colspec.

\begin{tblr}{lrrr}

je ve skutečnosti zkratkou za:

\begin{tblr}{colspec = {lrrr}}

Tato zkratka je ale použitelná jen samostatně. Jakmile chcete přidat tabulce další parametry, je třeba colspec uvést. Rozšířím trochu naši experimentální tabulku, přidám ještě jednu prodejnu, součty řádků i sloupců a nastavím svislé zarovnání. Aktuálně vypadá její zdrojový kód takto:

\begin{tblr}{colspec = {lrrr}, cells = {m}}
Prodejna & Leden    & Únor     & Celkem \\
Pražská  & 178\,253 & 92\,519  & 270\,772 \\
{ Nad lesním \\ koupalištěm } & 135\,462 & 167\,208 & 302\,670 \\
Lesní    & 292\,356 & 231\,485 & 523\,841 \\
Příkrá   & 143\,159 & 98\,730  & 241\,889 \\
Celkem   & 749\,230 & 589\,942 & 1\,339\,172 \\
\end{tblr}

a výsledek:

Chtělo by to odlišit první a poslední řádek. Barvy si necháme na později, zatím použijeme parametr font , kterým lze určit příkaz pro nastavení písma v dané buňce. Nadpisy v záhlaví bývají běžně kurzívou, pro buňky prvního řádku proto použijeme \itshape . Součtový řádek bude tučný (\bfseries ), přidáme tedy parametry:

row{1} = {font=\itshape},
row{Z} = {font=\bfseries}

a dostaneme:

Jak vidíte, indexy se zapisují do složených závorek a čísluje se od jedničky. Kromě čísel máme k dispozici i písmena Z, Y a X, která označují poslední, předposlední a předpředposlední řádek či sloupec. Při úpravě závěrečného řádku jsem díky nim nemusel počítat, kolikátý je.

Indexů lze uvést několik, oddělujte je čárkami ( row{1,3,5}). Místo indexu lze zapsat i rozsah od–do oddělený pomlčkou. Definice ovlivní všechny buňky v daném rozsahu. A jelikož se občas rozlišují sudé a liché, můžete místo indexu použít klíčová slova evenodd.

Tržby v ukázkové tabulce jsou v korunách, ale nikde to v ní není uvedeno. Tato informace bývá v popisku nebo v záhlaví sloupce, ale my použijeme další možnost prostředí tblr: parametrem appto lze připojit zadaný obsah na konec buňky. Analogicky preto přidá svůj obsah na začátek. Korunové částky jsou v buňkách od druhého do posledního řádku, a to od druhého do posledního sloupce. Přidáme proto:

cell{2-Z}{2-Z} = {appto = { Kč}}

Rozšířily se nám sloupce a doprava zarovnané záhlaví začíná vypadat divně. V prvním řádku proto obsah od druhého do posledního sloupce vodorovně vycentrujeme. Řádkový index se uvádí jako první, sloupcový jako druhý:

cell{1}{2-Z} = {c}

Celé záhlaví tabulky po uvedených změnách vypadá následovně:

\begin{tblr}{colspec = {lrrr},
    cells = {m},
    cell{1}{2-Z} = {c},
    cell{2-Z}{2-Z} = {appto = { Kč}},
    row{1} = {font=\itshape},
    row{Z} = {font=\bfseries},
}

a formátovaná tabulka:

Pokud – stejně jako já – neradi počítáte sloupce kvůli jejich definici na začátku tabulky, tak protblr nemusíte. Parametrcolspec můžete vynechat, LaTeX si je spočítá podle obsahu tabulky a způsob jejich zarovnání lze definovat výše uvedenými parametry.tblr také neskončí chybou, pokud tabulka obsahuje víc sloupců, než ohlašuje colspec . Jen pro ně použije výchozí vodorovné zarovnání.

Dostanou-li se definice vlastností do konfliktu, podobně jako v CSS pozdější vyhrává. V našem případě můžeme nejprve nastavit, že buňky mají být zarovnány doprava (a svisle na střed). Následně je v prvním řádku změníme na vodorovně centrované a v prvním sloupci na zarovnané doleva. colspec už nepotřebuji, mohu ho smazat. Ke stejnému výsledku tedy povede následující záhlaví tabulky:

\begin{tblr}{
    cells = {r, m},
    row{1} = {c, font=\itshape},
    row{Z} = {font=\bfseries},
    column{1} = {l},
    cell{2-Z}{2-Z} = {appto = { Kč}},
}

Kdybyste potřebovali s buňkou provádět něco složitějšího, je k dispozici parametr cmd. Jeho hodnotou je příkaz, kterému bude obsah buňky předán jako argument. Podobný efekt jako font=\itshape by mělo  cmd=\emph.

Než se pustíme do rozměrů, podívejme se ještě na možnosti zarovnání obsahu buňky. Ve vodorovném směru ( halign) máte tyto možnosti:

  • l (left) – k levému okraji,
  • r (right) – k pravému okraji,
  • c (center) – na střed,
  • j (justify) – do bloku, tedy se zarovnaným levým i pravým okrajem; raději nepoužívejte, sloupce bývají příliš úzké na kvalitní zarovnání do bloku.

Pro svislé zarovnání ( valign) je k dispozici:

  • t (top) – první řádek buňky na účaří řádku,
  • b (bottom) – poslední řádek buňky na účaří řádku,
  • m (middle) – na střed,
  • h (head) – k hornímu okraji,
  • f (foot) – k dolnímu okraji.

Pokud mají buňky v řádku různé svislé zarovnání, mohou být hodnoty t a b matoucí. Zarovnávají účaří prvního ( t) nebo posledního ( b) řádku své buňky vůči společnému účaří řádku tabulky. Když budou vedle sebe dvě dvouřádkové buňky, z nichž první má valign=t a druhá valign=b, dopadne to takto:

Zarovnánít umístí účaří svého prvního řádku na účaří řádku tabulky a zbývající řádky buňky budou pod ním, opticky proto zarovná buňku „dolů“. Problém nevznikne, jsou-li všechny buňky řádku zarovnány valign=t . Mají společný první řádek a různé počty řádků pod ním, jsou tedy zarovnány „nahoru“. Chcete-li mít jistotu, používejte zarovnáníh a f , ta ničím nepřekvapí.

Rozměry a nepravidelnosti

Pro sloupce je k dispozici parametr wd, jímž lze určit šířku. Hodnotou je požadovaný rozměr. Analogicky výšku řádku stanovíte parametrem ht. Jejich názvy lze vynechat. Uvedete-li mezi parametry samotný rozměr, bude u sloupce interpretován jako šířka a u řádku jako výška. Poněkud překvapivě u buňky je k dispozici jen wd, nikoli  ht.

Nastavme v naší tabulce všem sloupcům shodnou šířku 2.2 cm. Navíc necháme vykreslit hranice buněk, aby byly jejich rozměry jasně viditelné. Do záhlaví tedy přidáme:

hlines, vlines,
columns = 2.2cm,

a dostaneme:

Má-li sloupec definovánu šířku a jeho obsah je větší, budou se v něm dělit řádky. Mohl jsem proto u prodejny s dlouhým názvem zrušit složené závorky a ruční odřádkování, LaTeX se o vše postará. Třetí řádek se mi díky tomu zjednodušil na:

Nad lesním koupalištěm & 135\,462 & 167\,208 & 302\,670 \\

U rozdělených řádků zachovává zarovnání. Levý sloupec je zarovnán doleva, proto jsou i jednotlivé řádky zarovnány doleva.

Chcete-li nemožné, chování ve svislém a vodorovném směru se liší. Požadavek na příliš nízký řádek je ignorován, parametrem ht lze výšku jen zvětšit. Kdybych do záhlaví přidal rows=1mm, bude tabulka vypadat úplně stejně.

Naproti tomu šířku sloupce dodrží a pokud se obsah nevejde, přeteče do sousedního sloupce. Nerealistický požadavek columns=1cm skončí takto:

Alternativní možností, jak ovlivnit rozměry tabulky, je použít parametrwidth v kombinaci se sloupci typu X. Tento typ sloupce se objevil v balíku tabularx , jednom z mnoha, které rozšiřují původní tabulkový model. Představuje odstavcový sloupec (tedy lze v něm dělit řádky), jehož šířka se dopočítá tak, aby celková šířka tabulky odpovídala hodnotě parametru width .

V tblr  byl rozšířen o nepovinný parametr určující jeho podíl na dostupné šířce. Má smysl, když tabulka obsahuje více sloupců typu X, které nemají být stejně široké. V tom případě se mezi ně zbývající šířka rozdělí podle poměru těchto parametrů. Výchozí hodnotou je 1 a pokud ji nezměníte, rozdělí si dostupné místo rovným dílem. Například deklarace:

\begin{tblr}{width=10cm, colspec={lX[2]X[3]}}

znamená, že celá tabulka bude široká 10 cm. Šířka prvního sloupce typu l se určí automaticky podle jeho obsahu. Zbývající prostor se rozdělí v poměru 2:3 mezi druhý a třetí sloupec.

Když místo stejné šířky sloupců do záhlaví naší tabulky vložím:

colspec = {Xrrr},
width = 9.5cm,

dostanu:

Všimněte si, že poslední sloupec je o něco širší než druhý a třetí, protože obsahuje delší číslo. Šířka prvního pak doplnila tabulku na celkových 9,5 cm.

Parametr width je nepovinný, výchozí hodnotou je šířka řádku. Sloupce typu X jsou vhodné zejména pro delší texty, pro které se sazba tabulky na plnou šíři textu obvykle ideálně hodí.

Existuje celá řada parametrů pro mezery v tabulce. Lze je nastavovat společně i odděleně na začátcích a koncích řádků i sloupců. Zmíníme jen jeden univerzální: stretch řídí „hustotu“ tabulky ve svislém směru. Výchozí hodnotou je 1, větší hodnoty zvětší řádkové rozestupy, hodnoty menší než 1 je naopak zahustí. Zbývající parametry najdete v dokumentaci balíku.

Roztažení buňky do několika řádků nebo sloupců má specifickou syntaxi. Základem jsou parametry r pro řádky a c pro sloupce. Jejich hodnotou je počet řádků/sloupců, které má dotyčná buňka zabrat. Zapisují se ale odděleně od ostatních parametrů. Roztažená buňka má za rovnítkem dvoje složené závorky: první dvojice uzavírá parametry roztažení, druhá všechny ostatní.

Buňka se roztahuje doprava a dolů. Tabulková data neberou na roztažené buňky ohled. Měli byste vždy uvést plný počet řádků i sloupců. Buňky, které budou překryty roztaženou buňkou, nechte prázdné, ale v tabulkových datech musí být. Nejsou-li prázdné, prostě se nezobrazí.

Podívejme se na příklad. Mějme tabulku s pěti řádky a čtyřmi sloupci, jejíž druhá buňka druhého řádku je roztažena přes dva sloupce a tři řádky, její obsah je centrován. Zdrojový kód by vypadal následovně:

\begin{tblr}{colspec={cccc}, hlines, vlines,
    cell{2}{2} = {r=3, c=2}{c}
}
 1 &  2 &  3 &  4 \\
 5 &  6 &  7 &  8 \\
 9 & 10 & 11 & 12 \\
13 & 14 & 15 & 16 \\
17 & 18 & 19 & 20 \\
\end{tblr}

a výsledek (všimněte si, že obsah buněk 7, 10, 11, 14 a 15 zmizel):

Roztažení buňky je horkým kandidátem na to, aby se definovalo přímo v buňce, které se týká. Počítání indexů pro specifikaci záhlaví nebývá dvakrát zábavné. Bude se hodit staré rozhraní, konkrétně příkaz \SetCell , který vložíte na začátek roztahované buňky. Jako povinný argument mu zadáte parametry pro formátování dané buňky. I zde je roztažení odděleno a pokud je použijete, předejte jeho hodnoty příkazu\SetCell v nepovinném argumentu, tedy v hranatých závorkách.

Stejného výsledku jako výše bychom dosáhli, kdybychom místo specifikace roztažení buňky v parametrech tabulky vložili přímo do jejích dat:

5 & \SetCell[r=3, c=2]{c} 6 & 7 & 8 \\

Barvy a čáry

Nadešel čas na slibované barvy, načteme tedy balík xcolor. Máme k dispozici parametry bg pro barvu pozadí a fg pro barvu textu. Častěji se pracuje s pozadím, proto vyskytne-li se ve vlastnostech buněk samotný název barvy, bude interpretován jako barva pozadí. Oblíbené střídání světlejšího a tmavšího pozadí řádků zajistí:

row{odd} = {black!15},
row{even} = {black!7},

Obarvíme navíc první a poslední řádek, v něm zrušíme tučné písmo a necháme si je na zvýraznění celkového součtu (používáme názvy barev, které zpřístupní volba svgnames balíku  xcolor):

row{odd} = {black!15},
row{even} = {black!7},
row{1} = {Khaki},
row{Z} = {SteelBlue, fg=white},
cell{Z}{Z} = {SteelBlue!80!black, font=\bfseries}

a dostaneme:

Pokud jde o čáry ohraničující buňky v tabulce, nabízítabularray opravdu pestré možnosti. Dá se určovat barva, styl i šířka, čar může být víc, jejich různé segmenty mohou vypadat odlišně a tak dále. My to trochu odbydeme, protože čárám v tabulce je lépe se spíš vyhýbat.

Například v dokumentaci balíku booktabs se doporučuje úplně zapomenout na svislé čary a vodorovné používat jen střídmě. Existují i jedovaté typografické bonmoty, že k čáře se uchyluje ten, kdo nedovede vynechat adekvátní mezeru…

Ale pojďme se podívat, co máme k dispozici. K nastavení společného vzhledu všech vodorovných čar slouží hlines, jednotlivé čáry lze ovlivňovat pomocí hline s indexem. Analogicky pro svislé čáry máme vlinesvline.

Mají několik parametrů, ale nemusíte si je pamatovat, protože fungují zkratky. Jméno barvy znamená barvu čáry, rozměr její tloušťku a klíčové slovo solid (obvykle nemusíte psát, je výchozí), dashed nebo dotted její styl.

Nastavme naší tabulce barevné pozadí a přidejme bílé čáry mezi její řádky. Záhlaví a zápatí oddělíme silnější čarou:

rows = {LightSteelBlue},
hlines = {white, 0.5pt},
hline{2, Y} = {2pt},

a tady to máme:

Dlouhé tabulky

Balík tabularray umí i vícestránkové tabulky, ale není to s nimi úplně jednoduché. Snaží se v rozhraní pamatovat na všechny komponenty, takže když chcete dlouhou tabulku použít trochu jinak, než autor předpokládal, bude to znamenat práci navíc.

Vícestránkovou tabulku vytvoříte prostředím longtblr. Vypadá nějak takto:

\begin{longtblr}[vnější definice]{vnitřní definice}
tabulková data
\end{longtblr}

Vnitřní definice nastavují parametry vlastní tabulky. Odpovídají tomu, o čem jsme dosud psali – definujete tu sloupce, jejich zarovnání, barvy a podobně. Nad rámec parametrů prostředí tblr tu přibývají dva nové: rowhead určuje počet řádků na začátku tabulky, které tvoří její záhlaví a mají se opakovat na každé stránce. Analogicky rowfoot udává počet řádků opakujícího se zápatí.

Vnější definice ovlivňují okolí tabulky. Prostředí longtblr totiž kromě tabulky samotné zahrnuje i různé okolní komponenty. Některé, jako je popisek ( caption) a návěstí ( label), bývají součástí prostředí table, jiné jsou specifické pro dlouhé tabulky. Sem patří zejména ohlášení, že tabulka pokračuje na další stránce nebo že se jedná o pokračování z předchozí strany.

Změníme naši pokusnou tabulku na dlouhou, přidáme popisek a návěstí a rovnou i kousek textu, kde se na ni odkážeme. Záhlaví necháme opakovat na každé stránce, zápatí nikoli, součty by neodpovídaly a byly matoucí:

Přehled měsíčních tržeb v jednotlivých prodejnách uvádí tabulka~\ref{trzby}.

\begin{longtblr}[
    caption = {Celkové měsíční tržby v Kč},
    label = trzby,
]{
    cells = {r, m},
    row{odd} = {black!15},
    row{even} = {black!7},
    row{1} = {c, Khaki, font=\itshape},
    column{1} = {l, wd=2.5cm},
    row{Z} = {font=\bfseries, SteelBlue, fg=white},
    cell{Z}{Z} = {SteelBlue!80!black},
    rowhead = 1,
}
Prodejna & Leden    & Únor     & Celkem \\
Pražská  & 178\,253 & 92\,519  & 270\,772 \\
Nad lesním koupalištěm  & 135\,462 & 167\,208  & 302\,670 \\
Lesní    & 292\,356 & 231\,485 & 523\,841 \\
Příkrá   & 143\,159 & 98\,730  & 241\,889 \\
Celkem   & 749\,230 & 589\,942 & 1\,339\,172 \\
\end{longtblr}

Pokud tabulka vyjde na hranici dvou stránek, dopadne takto:

Je to pěkné, až na anglické nápisy.tabularray má pro tyto účely několik parametrů, jejichž hodnoty nastavuje příkaz\DefTblrTemplate a mohou se lišit pro různé styly tabulek. Nám nicméně postačí upravit parametryconthead-text (text přidávaný do popisků na dalších stránkách) acontfoot-text (text pod tabulkou, že ještě pokračuje) pro výchozí styl default . Do záhlaví dokumentu pod vložení balíku přidáme:

\DefTblrTemplate{conthead-text}{default}{(pokračování)}
\DefTblrTemplate{contfoot-text}{default}{pokračuje\,\ldots}

Prostředí longtblr napevno počítá s popiskem tabulky. Vynecháte-li ve vnějších definicích parametr caption, popisek s číslem tabulky stejně bude připojen, jen s prázdným textem. Pokud chcete jen samotnou vícestránkovou tabulku bez všech okolních prvků, je třeba vymazat několik parametrů:

\DefTblrTemplate{contfoot-text}{default}{}
\DefTblrTemplate{conthead-text}{default}{}
\DefTblrTemplate{caption}{default}{}
\DefTblrTemplate{conthead}{default}{}
\DefTblrTemplate{capcont}{default}{}

Názvy příkazů napovídají, že tabularray obsahuje systém šablon (templates), kterými se řídí podoba prvků obalujících dlouhé tabulky. Lze nastavit písmo, barvu i další vlastnosti. Kromě toho je k mání několik dalších parametrů, takže například popisek na první, průběžné a poslední straně tabulky se může lišit. Celkově se jedná o několik desítek parametrů, najdete je v dokumentaci balíku.

Pro ovlivňování stránkových zlomů uvnitř dlouhých tabulek jsou k dispozici obvyklé prostředky. Pomocí \\* ukončíte řádek a zakážete rozdělit stránku mezi ním a jeho následníkem. Kromě toho lze v těle tabulky používat standardní příkazy \pagebreak\nopageberak.

Sériová výroba

V delších textech bývá tabulek více a měly by vypadat konzistentně. Jistě lze nastavovat parametry pro každou individuálně, ale to je jednak pracné, jednak hrozí nekonzistence. Naštěstí tabularray nabízí možnosti, jak si ušetřit práci.

Základem je příkaz \SetTblrInner, jehož argumentem jsou výchozí parametry všech tabulek (přesněji jejich vnitřní definice, viz výše). Zde nastavte barevné schéma, zarovnání buněk a podobně. U jednotlivých tabulek pak jen doplňte či změňte ty parametry, které jsou pro ně specifické. Balík se chová, jako by obsah \SetTblrInner byl napsán na začátku parametrů tabulky, jakékoli místní hodnoty jsou až za nimi, proto přepíší ty výchozí. Nechcete-li nic měnit ani doplňovat, jednoduše nechte argument u zahájení tabulky prázdný.

Tabulka z části o barvách by vznikla i pomocí následujícího kódu:

\SetTblrInner{
    cells = {r, m},
    row{odd} = {black!15},
    row{even} = {black!7},
    row{1} = {c, Khaki, font=\itshape},
    row{Z} = {SteelBlue, fg=white},
    column{1} = {l},
    cell{Z}{Z} = {SteelBlue!80!black, font=\bfseries},
}
...
\begin{tblr}{}
Prodejna & Leden & Únor & Celkem \\
...
Celkem & 749\,230 & 589\,942 & 1\,339\,172 \\
\end{tblr}

Příkaz \SetTblrInner je vhodné použít v záhlaví dokumentu, hned po načtení balíku. V základním tvaru ovlivňuje prostředí tblr. Má-li nastavit parametry pro jiné prostředí, uveďte jeho název v nepovinném argumentu. Může jich být i víc, oddělujte je čárkami. Takže:

\SetTblrInner[tblr, longtblr]{...}

nastaví společné výchozí parametry pro prostředí tblr a longtblr. Existuje i příkaz \SetTblrOuter pro nastavení vnějších definic, ale ty obvykle bývají specifické pro konkrétní tabulku, takže jej spíš nebudete potřebovat.

Vyskytuje se v dokumentu několik typů tabulek, které chcete odlišit? Můžete si definovat své vlastní tabulkové prostředí pomocí:

\NewTblrEnviron{název}

a následně mu příkazem \SetTblrInner nastavit výchozí chování. Vezměme si jako příklad nějakou zprávu o hospodaření, kde se budou vyskytovat různé tabulky výnosů a nákladů. Aby byly rozpoznatelné na první pohled, tabulkám s výnosy nastavíme zelené pozadí a tabulkám s náklady červené. Vytvoříme si pro tento účel tabulková prostředí vynosy a naklady. Pracuje se s nimi stejně jako s tblr, jen mají odlišné výchozí nastavení. Zarovnání a výchozí barevné schéma nastavíme všem společně a následně upravíme barvy pro nová prostředí:

\NewTblrEnviron{vynosy}
\NewTblrEnviron{naklady}

\SetTblrInner[tblr, longtblr, vynosy, naklady]{
    cells = {r, m},
    row{odd} = {black!15},
    row{even} = {black!7},
    row{1} = {c, Khaki, font=\itshape},
    row{Z} = {font=\bfseries, SteelBlue, fg=white},
    column{1} = {l},
    cell{Z}{Z} = {SteelBlue!80!black},
}

\SetTblrInner[vynosy]{
    row{odd} = {OliveDrab!25},
    row{even} = {OliveDrab!15},
    row{1,Z} ={OliveDrab, fg=white},
}

\SetTblrInner[naklady]{
    row{odd} = {Maroon!25},
    row{even} = {Maroon!15},
    row{1,Z} ={Maroon, fg=white},
}

Jejich použití vypadá nějak takto:

\begin{vynosy}{}
Výnosy       & Leden    & Únor     & Celkem \\
Prodej zboží & 312\,268 & 295\,419 & 607\,687 \\
Služby       & 197\,423 & 133\,515 & 330\,938 \\
Celkem       & 509\,691 & 428\,934 & 938\,625 \\
\end{vynosy}

\begin{naklady}{}
Náklady        & Leden    & Únor     & Celkem \\
Mzdové náklady & 83\,146  & 78\,412  & 161\,558 \\
Nákup zboží    & 298\,875 & 254\,381 & 553\,256 \\
Nájemné        & 50\,000  & 50\,000  & 100\,000 \\
Celkem         & 432\,021 & 382\,793 & 814\,814 \\
\end{naklady}

A výsledek:

Máte dlouhatánskou tabulku nákladů, která se nevejde na stránku? Žádný problém, prostě jí přidejte vnější definice s kouzelným slůvkemlong a uděláte z ní dlouhou tabulku à la longtblr :

\begin{naklady}[
    long,
    caption = {Struktura nákladů v roce 2023 v Kč},
    label = naklady23,
    ]{rowhead=1}

Vypadá pak nějak takto:

bitcoin_skoleni

A to není všechno

Pokusili jsme se popsat základy používání balíku tabularray, náš popis ale zdaleka není úplný. Dokumentace obsahuje 50 stran popisu a příkladů jeho konstrukcí a přes 100 stran komentovaného zdrojového kódu. Najdete v ní řadu jemnůstek, které v běžném provozu nebývají potřebné, ale ve specifických případech vám mohou vytrhnout trn z paty. Pokud balík tabularray vzbudil váš zájem, určitě si manuál pročtěte.

(Autorem obrázků je Pavel Satrapa.)

Autor článku

Pavel Satrapa působí na Ústavu nových technologií a aplikované informatiky na Technické univerzitě v Liberci, píše knihy a motá se kolem tuzemské akademické sítě CESNET.