Lentelės
Ši pamoka parodo, kaip koduoti LaTeX kalboje lenteles, nustatyti teksto lygiavimą langeliuose ir tarp jų, pridėti linijas ir apjungti langelius.
Lentelės LaTeX renkamos tabular
aplinkoje. Šioje pamokoje darome prielaidą, kad jūs naudojate array
paketą, kuris prideda daugiau galimybių LaTeX lentelėms ruošti ir kuris nėra LaTeX branduolyje tik dėl istorinių aplinkybių. Taigi, įdėkite į savo dokumento preambulę šiuos dalykus ir mes galėsime pradėti:
\usepackage{array}
Įvesdami tabular
aplinką turime nurodyti, kiek bus kolonėlių ir koks juose bus lygiavimas. Tai labai paprastai nurodome privalomajame \begin{tabular}
komandos argumente, dažnai vadinamame lentelės preambule: viena raidė vienai kolonėlei (sudėtingesni dalykai priklauso array
paketui). Raidės vadinamos preambulės žetonais (preamble-tokens) ir yra tokios:
žetonas | teksto lygiavimas kolonėlėje |
---|---|
l | pagal kairįjį kraštą (left aligned) |
c | centruotas (centered) |
r | pagal dešinįjį kraštą (right aligned) |
p{width} | sulaužytas į pločio width pastraipą, išlygiuotą abiejuose kraštuose; vertikalus lygiavimas pagal pirmąją pastraipos eilutę (top aligned) |
m{width} | kaip p , bet vertikaliai centruotas (middle aligned) |
b{width} | kaip p , bet vertikaliai – pagal apatinę eilutę (bottom aligned) |
w{align}{width} | kaip p , bet horizontaliai – pagal align , kuris gali būti vienas iš l , c , ar r |
W{align}{width} | kaip w , tik įspės apie perpildytą dėžę (overfull box), jei turinys netilps į nurodytą plotį |
Be to, yra keletas kitų preambulės žetonų, kurie neapibrėžia kolonėlės, bet taip pat gali būti naudingi:
žetonas | veikimo aprašymas |
---|---|
*{num}{string} | num kartų pakartoja seką string preambulėje; taip galite aprašyti daug identiško lygiavimo kolonėlių |
>{decl} | įdeda deklaraciją decl prieš kiekvieno langelio turinį kitoje kolonėlėje (tai praverčia, pvz., nustatyti kitokį kolonėlės šriftą) |
<{decl} | įdeda decl po kiekvieno langelio turinio ankstesnėje kolonėlėje |
| | brėžia vertikalią liniją tarp langelių |
@{decl} | pakeičia tarpą tarp dviejų langelių į decl |
!{decl} | įdeda decl į vidurį tarpo, esančio tarp dviejų langelių |
Šios dvi lentelės pateikė visus galimus LaTeX ir array
paketo kolonėlių tipus. Keli papildomi kolonėlių tipai iš kitų paketų pateikti papildomos informacijos puslapyje prie šios pamokos.
Kolonėlės tipo l
, c
, ir r
natūraliai turi plačiausio jų langelio plotį. Kiekviena kolonėlė turi būti deklaruota, taigi, norėdami trijų centruotų kolonėlių, lentelės preambulėje nurodykite ccc
. Tarpai preambulėje ignoruojami, todėl c c c
reiškia tą patį.
Lentelėje kolonėlės atskiriamos ženklu &
(ampersand), o perėjimas į naują eilutę nurodomas su \\
.
Mes jau turime viską, ko reikia mūsų pirmajai lentelei. Tolesniame kode ženklai &
ir \\
yra sulygiuoti. Tai daryti nėra būtina, tik padeda skaityti įvesties kodą.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\begin{document}
\begin{tabular}{lll}
Animal & Food & Size \\
dog & meat & medium \\
horse & hay & large \\
frog & flies & small \\
\end{tabular}
\end{document}
Jei lentelės kolonėlėje yra daug teksto, tai bus problemų išgauti tinkamą vaizdą tik su l
, c
, ar r
. Pažiūrėkite, kas atsitinka šiame pavyzdyje:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\begin{document}
\begin{tabular}{cl}
Animal & Description \\
dog & The dog is a member of the genus Canis, which forms part of the
wolf-like canids, and is the most widely abundant terrestrial
carnivore. \\
cat & The cat is a domestic species of small carnivorous mammal. It is the
only domesticated species in the family Felidae and is often referred
to as the domestic cat to distinguish it from the wild members of the
family. \\
\end{tabular}
\end{document}
Problema ta, kad l
tipo kolonėlės langelis pateikia savo turinį vienoje eilutėje visu jo natūraliu pločiu, net jei išeinama už puslapio krašto. Norėdami tai sutvarkyti, galite naudoti kolonėlę p
. Joje langelių turinys pateikiamas pastraipomis, kurių plotį nurodėte p
argumente, o vertikaliai jos lygiuojamos pagal savo pirmąsias eilutes – tas jums dažniausiai ir tiks. Palyginkite aukščiau gautą rezultatą su šiuo:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\begin{document}
\begin{tabular}{cp{9cm}}
Animal & Description \\
dog & The dog is a member of the genus Canis, which forms part of the
wolf-like canids, and is the most widely abundant terrestrial
carnivore. \\
cat & The cat is a domestic species of small carnivorous mammal. It is the
only domesticated species in the family Felidae and is often referred
to as the domestic cat to distinguish it from the wild members of the
family. \\
\end{tabular}
\end{document}
Jei kartais jūsų lentelėje yra daug to paties tipo stulpelių, gali būti nepatogu į preambulę surašyti tiek pat stulpelių apibrėžimų. Naudojantis žetonu *{num}{string}
, kuris num
kartų pakartoja seką string
, galite pasilengvinti uždavinį. Taigi, *{6}{c}
yra lygiavertis cccccc
. Kad pademonstruoti, kad tai veikia, štai pirmoji šios pamokos lentelė su naujai išmokta sintakse:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\begin{document}
\begin{tabular}{*{3}{l}}
Animal & Food & Size \\
dog & meat & medium \\
horse & hay & large \\
frog & flies & small \\
\end{tabular}
\end{document}
Linijų pridėjimas
Patariamasis žodis prieš pradedant apie linijas: linijų lentelėse turėtų būti naudojama nedaug, o vertikaliosios paprastai neatrodo profesionaliai. Tiesą sakant, profesionalioms lentelėms nereiktų naudoti standartinių LaTeX linijų; vietoj to jūs turėtumėte susipažinti su booktabs
paketo galimybėmis, todėl jis čia pirmiausia ir aptariamas. Siekiant išsamumo, standartinės linijos parodytos „daugiau šia tema“ puslapyje.
Paketas booktabs
apibrėžia keturis skirtingus horizontalių linijų tipus. Visos horizontalių linijų komandos gali būti naudojamos tik kaip pirmieji dalykai lentelių eilutėse. Trys linijų komandų tokios: \toprule
(virš lentelės), \midrule
(lentelės viduje) ir \bottomrule
(po lentele):
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{lll}
\toprule
Animal & Food & Size \\
\midrule
dog & meat & medium \\
horse & hay & large \\
frog & flies & small \\
\bottomrule
\end{tabular}
\end{document}
Ketvirtoji linijos brėžimo komanda booktabs
pakete yra \cmidrule
. Ji naudojama nubrėžti liniją ne per visą lentelės plotį, o tik per nurodytą kolonėlių intervalą; pastarasis nurodomas kaip kolonėlių numerių intervalas: {
numeris-
numeris}
. Net jei reikia linijos tik per vieną kolonėlę, turite nurodyti intervalą (su vienodais skaičiais).
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{lll}
\toprule
Animal & Food & Size \\
\midrule
dog & meat & medium \\
\cmidrule{1-2}
horse & hay & large \\
\cmidrule{1-1}
\cmidrule{3-3}
frog & flies & small \\
\bottomrule
\end{tabular}
\end{document}
Viena naudinga \cmidrule
savybė yra galimybė pritrumpinti linijos galus. Trumpinamas galas nurodomas raide neprivalomame argumente skliausteliuose:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{lll}
\toprule
Animal & Food & Size \\
\midrule
dog & meat & medium \\
\cmidrule{1-2}
horse & hay & large \\
\cmidrule(r){1-1}
\cmidrule(rl){2-2}
\cmidrule(l){3-3}
frog & flies & small \\
\bottomrule
\end{tabular}
\end{document}
Galbūt jūs jau atspėjote, kad r
ir l
reiškia atitinkamai dešinįjį (right) ir kairįjį (left) galą.
Kartais linija būna per daug ryškus atskyrimas tarp dviejų eilučių, nors aiškesniam suvokimui norisi jas kažkaip atskirti. Tokiu atveju galima panaudoti \addlinespace
mažo papildomo tarpo įdėjimui.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{cp{9cm}}
\toprule
Animal & Description \\
\midrule
dog & The dog is a member of the genus Canis, which forms part of the
wolf-like canids, and is the most widely abundant terrestrial
carnivore. \\
\addlinespace
cat & The cat is a domestic species of small carnivorous mammal. It is the
only domesticated species in the family Felidae and is often referred
to as the domestic cat to distinguish it from the wild members of the
family. \\
\bottomrule
\end{tabular}
\end{document}
Langelių apjungimas
Vienoje eilutėje esančius kaimyninius langelius galite apjungti su komanda \multicolumn
. Ji turi būti pirmasis dalykas pirmajame apjungiamame langelyje. \multicolumn
reikia trijų argumentų:
- apjungiamų langelių skaičius,
- jungtinio langelio lygiavimas,
- jungtinio langelio turinys.
Lygiavimo argumente gali būti bet kas, kas legalu tabular
preambulėje, bet tik vienas kolonėlės tipas.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{lll}
\toprule
Animal & Food & Size \\
\midrule
dog & meat & medium \\
horse & hay & large \\
frog & flies & small \\
fuath & \multicolumn{2}{c}{unknown} \\
\bottomrule
\end{tabular}
\end{document}
\multicolumn
galima pritaikyti ir vienam langeliui, kai norite perapibrėžti lentelės preambulės nustatymus duotai kolonėlei. Žemiau pateiktas pavyzdys naudoja šį metodą kolonėlių antraštėms centruoti:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{lll}
\toprule
\multicolumn{1}{c}{Animal} & \multicolumn{1}{c}{Food} & \multicolumn{1}{c}{Size} \\
\midrule
dog & meat & medium \\
horse & hay & large \\
frog & flies & small \\
fuath & \multicolumn{2}{c}{unknown} \\
\bottomrule
\end{tabular}
\end{document}
LaTeX nepalaiko vertikalaus langelių apjungimo (kuris veiktų nepriekaištingai). Paprastai pakanka palikti tuščius langelius, kad skaitytojas suvoktų, kas turėta omenyje, ir be langelių per kelias eilutes apjungimo.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{lll}
\toprule
Group & Animal & Size \\
\midrule
herbivore & horse & large \\
& deer & medium \\
& rabbit & small \\
\addlinespace
carnivore & dog & medium \\
& cat & small \\
& lion & large \\
\addlinespace
omnivore & crow & small \\
& bear & large \\
& pig & medium \\
\bottomrule
\end{tabular}
\end{document}
Pratimai
Pasinaudokite paprastu lentelės pavyzdžiu ir pradėkite bandymus su lentelėmis. Išbandykite skirtingus lygiavimus, panaudodami kolonėlių tipus l
, c
ir r
. Kas nutiks, jei lentelės eilutėje turėsite per mažai elementų? O kas, jei per daug? Pabandykite komandą \multicolumn
langelių apjungimui.