Lliçó 8

Taules

Aquesta lliçó explica com pots realitzar taules a LaTeX, canviar l’alineació de les cel·les, afegir regles a la taula, i combinar cel·les.

A LaTeX les taules es defineixen amb l’entorn tabular. Aquesta lliçó assumeix que tens carregat el paquet array, que afegeix moltes funcionalitats a les taules de LaTeX, i que no forma part del nucli per raons històriques. Així doncs posa el següent text en el preàmbul i mirem com funciona:

\usepackage{array}

Per donar un format a l’entorn tabular li hem de dir a LaTeX quantes columnes necessitem i com han d’estar alineades. Això ho fem amb un argument obligatori – sovint referit com a preàmbul de la taula – en l’entorn tabular, on especifiquem les columnes utilitzant noms d’un sol caràcter, anomenats identificadors de preàmbul. Els tipus de columna disponibles són:

tipusdescripció
lcolumna justificada a l’esquerra
ccolumna centrada
rcolumna justificada a la dreta
p{width}columna amb una amplada fixa width; el text s’ajustarà automàticament a la línia
m{width}igual que p, però centrat verticalment en comparació amb la resta de la fila
b{width}igual que p, però posicionat a la part inferior de la cel·la
w{align}{width}imprimeix el contingut amb una amplada width fixa, sobreimprimint si el text és massa llarg. Pots escollir l’alineació horitzontal amb l, c, o r.
W{align}{width}igual que w, però mostra un missatge d’alerta si el text és massa ample.

A més a més, també hi ha disponibles altres identificadors de preàmbul, que et poden ser de gran utilitat:

tipusdescripció
*{num}{string}repeteix string un número de vegades num en el preàmbul. D’aquesta manera pots definir columnes idèntiques múltiples vegades.
>{decl}posa decl abans del contingut en cada cel·la de la següent columna (això és útil, per exemple, per canviar la font en aquesta columna)
<{decl}posa decl després del contingut en cada cel·la de la columna prèvia
|afegeix una regla vertical
@{decl}reemplaça els espais entre dues columnes amb decl
!{decl}afegeix decl enmig d’un espai

Aquestes dues taules llisten totes les possibilitats de tipus de columna a LaTeX i en el paquet array. Alguns tipus de columna addicionals, disponibles en d’altres paquets, s’expliquen més endavant.

Les columnes l, c, i r tindran l’amplada natural de la cel·la més ampla. Cada columna s’ha de declarar, de manera que si vols tres columnes centrades, escriuràs ccc en el preàmbul de la taula. Els espais s’ingnoren, així doncs c c c és el mateix.

En el cos de la taula les columnes estan separades utilitzant el símbol & i una nova fila comença amb \\.

Ja tenim tot el que necessitem per a la primera taula. En el següent codi hem alineat & i \\. Això no és necessari a LaTeX, però fer-ho ajuda a la legibilitat del codi.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}

\begin{document}
\begin{tabular}{lll}
  Animal & Menjar  & Tamany   \\
  gos    & carn  & mitjà \\
  cavall  & ufals   & gros  \\
  granota   & mosques & petit  \\
\end{tabular}
\end{document}

Si la columna d’una taula conté molt de text serà difícil aconseguir un bon disseny utilitzant només l, c, i r. Mira què passa en el següent exemple:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}

\begin{document}
\begin{tabular}{cl}
  Animal & Descripció \\
  gos    & El gos és un membre del gènere Canis, que forma part dels
           cànids (igual que els llops), i és el carnívor terrestre
           més abundant. \\
  gat    & El gat és una espècie domèstica de mamífer carnívor petit. És la única
           espècie domesticada de la família Felidae (felins), i sovint s'anomena com a
           gat domèstic per distingir-lo dels membres salvatges de la
           família. \\
\end{tabular}
\end{document}

El problema és que el tipus de columna l mostra el text en una sola fila amb la seva amplada natural, encara que es trobi amb el contorn de la pàgina. Per solucionar-ho pots utilitzar la columna p, que té per efecte escriure el contingut com a paràgraf amb l’amplada que has especificat com a argument i alinea verticalment a dalt de la cel·la (com és habitual). Compara el resultat de més amunt amb el següent:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}

\begin{document}
\begin{tabular}{cp{9cm}}
  Animal & Descripció \\
  gos    & El gos és un membre del gènere Canis, que forma part dels
           cànids (igual que els llops), i és el carnívor terrestre
           més abundant. \\
  gat    & El gat és una espècie domèstica de mamífer carnívor petit. És la única
           espècie domesticada de la família Felidae (felins), i sovint s'anomena com a
           gat domèstic per distingir-lo dels membres salvatges de la
           família. \\
\end{tabular}
\end{document}

Si la teva taula té moltes columnes del mateix tipus pot ser molest posar massa definicions de columna en el preàmbul. Pots fer les coses més senzilles utilitzant *{num}{string}, que fa repetir la cadena string un número num de vegades. D’aquesta manera, *{6}{c} és equivalent a cccccc. Per veure-ho mostrem la primera taula de la lliçó amb aquesta notació:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}

\begin{document}
\begin{tabular}{*{3}{l}}
  Animal & Menjar  & Tamany   \\
  gos    & carn  & mitjà \\
  cavall  & ufals   & gros  \\
  granota   & mosques & petit  \\
\end{tabular}
\end{document}

Afegir línies a les taules

Un petit consell abans d’introduir-nos amb les línies; en les taules les línies s’han d’utilitzar amb cura i normalment les línies verticals no són molt recomanables. De fet, per a les taules professionals millor no utilitzar cap de les línies estàndard; més aviat t’has de familiaritzar amb les que facilita el paquet booktabs, i per aquest motiu les explicarem ara, en primer lloc. Una explicació més completa sobre les línies estàndard s’explicara en la secció més sobre.

booktabs proporciona quatre tipus diferents de línies. Cadascuna d’aquestes comandes s’ha d’utilitzar al principi de la línia o a continuació d’una altra regla. Tres de les regles són: \toprule, \midrule, i \bottomrule. Amb el seu nom queda clara la seva funció:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}


\begin{document}
\begin{tabular}{lll}
  \toprule
  Animal & Menjar  & Tamany   \\
  \midrule
  gos    & carn  & mitjà \\
  cavall  & ufals   & gros  \\
  granota   & mosques & petit  \\
  \bottomrule
\end{tabular}
\end{document}

La quarta regla que proporciona booktabs és \cmidrule. Es pot utilitzar per dibuixar una línia que no s’estengui per tota l’amplada de la columna sinó només en determinades columnes. El format per saber en quines columnes hem de dibuixar la línia és: {number-number}. Fins i tot si només vols dibuixar la línia en una sola columna has d’especificar-ho com a rang (en aquest cas amb els dos números iguals).

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{lll}
  \toprule
  Animal & Menjar  & Tamany   \\
  \midrule
  gos    & carn  & mitjà \\
  \cmidrule{1-2}
  cavall  & ufals   & gros  \\
  \cmidrule{1-1}
  \cmidrule{3-3}
  granota   & mosques & petit  \\
  \bottomrule
\end{tabular}
\end{document}

Encara hi ha un altre ús útil de \cmidrule. Pots escurçar el principi o el final d’una línia o fins i tot amb un argument opcional entre parèntesi:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{lll}
  \toprule
  Animal & Menjar  & Tamany   \\
  \midrule
  gos    & carn  & mitjà \\
  \cmidrule{1-2}
  cavall  & ufals   & gros  \\
  \cmidrule(r){1-1}
  \cmidrule(rl){2-2}
  \cmidrule(l){3-3}
  granota   & mosques & petit  \\
  \bottomrule
\end{tabular}
\end{document}

Hauràs endevinat que el nom de les regles r i l signifiquen respectivament right (dreta) i left (esquerra).

A vegades una línia pot implicar una forta separació, no desitjada, entre dues files, però a vegades sí que voldrem separar les línies d’alguna manera. En aquest cas pots utilitzar \addlinespace que afegirà un petit espai vertical entre les dues.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{cp{9cm}}
  \toprule
  Animal & Descripció \\
  \midrule
  gos    & El gos és un membre del gènere Canis, que forma part dels
           cànids (igual que els llops), i és el carnívor terrestre
           més abundant. \\
  \addlinespace
  gat    & El gat és una espècie domèstica de mamífer carnívor petit. És la única
           espècie domesticada de la família Felidae (felins), i sovint s'anomena com a
           gat domèstic per distingir-lo dels membres salvatges de la
           família. \\
  \bottomrule
\end{tabular}
\end{document}

Combinar cel·les

A LaTeX pots combinar o fusionar cel·les horitzontalment utilitzant la comanda \multicolumn. És el primer que s’ha d’utilitzar dins de la cel·la. \multicolumn pren tres arguments:

  1. El número de cel·les que s’han de combinar
  2. La justificació de la cel·la combinada
  3. El text de la cel·la combinada

La justificació pot tenir qualsevol opció vàlida del preàmbul de tabular, però només un únic tipus de columna.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{lll}
  \toprule
  Animal & Menjar  & Tamany   \\
  \midrule
  gos    & carn  & mitjà \\
  cavall  & ufals   & gros  \\
  granota  & mosques & petit  \\
  fuath  & \multicolumn{2}{c}{unknown} \\
  \bottomrule
\end{tabular}
\end{document}

També pots utilitzar \multicolumn dins d’una cel·la per prevenir l’aplicació de qualsevol coa que hagis definit en el preàmbul de la taula per a la columna actual. El següent exemple ho fa servir per centrar la capçalera de la taula:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{lll}
  \toprule
  \multicolumn{1}{c}{Animal} & \multicolumn{1}{c}{Menjar} & \multicolumn{1}{c}{Tamany} \\
  \midrule
  gos    & carn  & mitjà \\
  cavall  & ufals   & gros  \\
  granota   & mosques & petit  \\
  fuath  & \multicolumn{2}{c}{unknown} \\
  \bottomrule
\end{tabular}
\end{document}

La combinació de cel·les verticalment no està suportat a LaTeX. Normalment n’hi ha prou en deixar les cel·les buides per donar al lector la idea correcta de què es vol expressar, sense haver de fer una fusió de files.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}


\begin{document}
\begin{tabular}{lll}
  \toprule
  Grup     & Animal & Tamany   \\
  \midrule
  herbívor & cavall  & gros  \\
            & cabirol   & mitjà \\
            & conill & petit  \\
  \addlinespace
  carnívor & gos    & mitjà \\
            & gat    & petit  \\
            & lleó   & gros  \\
  \addlinespace
  omnívor  & corb   & petit  \\
            & ós   & gros  \\
            & porc    & mitjà \\
  \bottomrule
\end{tabular}
\end{document}

Exercicis

Utilitza un exemple senzill de taula per començar a experimentar amb les taules. Prova diferents alineacions utilitzant els tipus de columna l, c i r. Què passa si tens massa poc elements en una fila de la taula? I què passa si en tens massa? Experimenta amb la comanda \multicolumn per fer combinació de columnes.