Lição 8

Tabelas

Esta lição mostra como você pode construir tabelas no LaTeX, influenciar o alinhamento das células, adicionar linhas à tabela, e unir células.

Tabelas no LaTeX são feitas usando o ambiente tabular. Esta lição vai assumir que você carregou o pacote array, que adiciona mais funcionalidades às tabelas do LaTeX, e que não é carregado por padrão no LaTeX por motivos históricos. Então adicione o seguinte no seu preâmbulo e você estará pronto para a lição:

\usepackage{array}

Para criar um tabular vamos dizer ao LaTeX quantas colunas serão necessárias e como elas serão alinhadas. Isso é feito com um argumento obrigatório – geralmente chamado de preâmbulo da tabela – no ambiente tabular, em que você especifica as colunas usando nomes de uma letra, chamados símbolos de preâmbulo (preamble-tokens). Os tipos disponíveis são:

tipodescrição
lcoluna alinhada à esquerda
ccoluna centralizada
rcoluna alinhada à direita
p{largura}uma coluna com largura fixa; o texto será justificado e quebrado em linhas automaticamente
m{largura}igual p, mas centralizado verticalmente em relação ao restante da linha da tabela
b{largura}igual p, alinhado ao fundo
w{alin}{largura}escreve os conteúdos com uma largura fixa, sobrescrevendo se o conteúdo for mais largo. Você pode escolher o alinhamento horizontal alin usando l, c, ou r
W{alin}{largura}igual w, mas haverá um aviso de “overfull box” se o conteúdo for mais largo que largura

Além desses, outros símbolos de preâmblo estão disponíveis, que não criam uma coluna, mas também são úteis:

tipodescrição
*{num}{símbolos}repete os símbolos, num vezes no preâmbulo. Com isso você pode criar várias colunas com configuração idêntica
>{decl}este vai colocar decl antes dos conteúdos de cada célula da coluna que segue (isso é útil, por exemplo, para usar uma fonte diferente para esta coluna)
<{decl}este vai colocar decl depois dos conteúdos de cada célula da coluna que precede
|adiciona uma linha vertical
@{decl}substitiu o espaço entre colunas por decl
!{decl}adiciona decl no centro do espaço existente entre colunas

Essas duas tabelas listam todos os tipos de colunas disponíveis no LaTeX e no pacote array. Alguns tipos adicionais de colunas, de pacotes diferentes, são apresentados na página de detalhes adicionais dessa lição.

As colunas l, c, e r terão a largura natural da célula mais larga daquela coluna. Cada coluna deve ser declarada, então se você quer três colunas centralizadas você usaria ccc no preâmbulo da tabela. Espaços são ignorados, então c c c é o mesmo.

No corpo de uma tabela, colunas são separadas usando um “e comercial” & e uma nova linha é iniciada usando \\.

Nós temos tudo o que precisamos para nossa primeira tabela. No exemplo a seguir os & e \\ estão alinhados. Isso não é necessário no LaTeX, mas auxilia a entender o código da tabela.

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

\begin{document}
\begin{tabular}{lll}
  Animal & Comida & Tamanho \\
  cão    & carne  & médio   \\
  cavalo & capim  & grande  \\
  sapo   & moscas & pequeno \\
\end{tabular}
\end{document}

Se a coluna de uma tabela contém muito texto você terá problemas em acertar a tabela apenas com l, c, e r. Veja o que acontece no exemplo a seguir:

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

\begin{document}
\begin{tabular}{cl}
  Animal & Descrição \\
  Cão    & O cão é um mamífero carnívoro da família dos canídeos, subespécie do
           lobo, e talvez o mais antigo animal domesticado pelo ser humano. \\
  Gato   & O gato é um mamífero carnívoro da família dos felídeos, muito popular
           como animal de estimação. Ocupando o topo da cadeia alimentar, é
           predador natural de diversos animais, como roedores, pássaros,
           lagartixas e alguns insetos. \\
\end{tabular}
\end{document}

O problema é que o tipo de coluna l escreve os conteúdos em uma única linha com sua largura natural, mesmo se isso ultrapassar a margem. Para vencer isso você pode usar a coluna tipo p. Ela escreve os conteúdos como parágrafos com a largura que você especificar como argumento e alinha o bloco de texto com o topo das outras linhas – que é o que você vai querer na maioria das vezes. Compare a tabela acima com a seguinte:

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

\begin{document}
\begin{tabular}{cp{9cm}}
  Animal & Descrição \\
  Cão    & O cão é um mamífero carnívoro da família dos canídeos, subespécie do
           lobo, e talvez o mais antigo animal domesticado pelo ser humano. \\
  Gato   & O gato é um mamífero carnívoro da família dos felídeos, muito popular
           como animal de estimação. Ocupando o topo da cadeia alimentar, é
           predador natural de diversos animais, como roedores, pássaros,
           lagartixas e alguns insetos. \\
\end{tabular}
\end{document}

Se sua tabela tem muitas colunas iguais, é trabalhoso digitar todas as definições de coluna no preâmbulo. Você pode facilitar as coisas usando *{num}{símbolos}, que vai repetir os símbolos por num vezes. Assim, *{6}{c} é equivalente a cccccc. Para mostrar como isso funciona, aqui está a primeira tabela dessa lição, mas com a nova sintaxe:

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

\begin{document}
\begin{tabular}{*{3}{l}}
  Animal & Comida & Tamanho \\
  cão    & carne  & médio   \\
  cavalo & capim  & grande  \\
  sapo   & moscas & pequeno \\
\end{tabular}
\end{document}

Adicionando linhas

Um conselho antes de apresentar linhas em tabelas; linhas devem ser usadas com moderação em tabelas, e normalmente linhas verticais devem ser completamente evitadas. De fato, tabelas ‘profissionais’ não devem usar nenhuma das linhas padrão fornecidas pelo LaTeX; ao invés disso você deve se familiarizar com os recursos do pacote booktabs, que é porque ele é mostrado aqui. Para constar, as linhas padrão são mostradas na página de mais informações.

O pacote booktabs fornece quatro tipos diferentes de linhas. Cada um desses comandos deve ser a primeira coisa em uma linha ou deve seguir outra linha. Três desses comandos são: \toprule, \midrule, e \bottomrule, e devem ser usados no topo, meio, e final da tabela, respectivamente:

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


\begin{document}
\begin{tabular}{lll}
  \toprule
  Animal & Comida & Tamanho \\
  \midrule
  cão    & carne  & médio   \\
  cavalo & capim  & grande  \\
  sapo   & moscas & pequeno \\
  \bottomrule
\end{tabular}
\end{document}

O quarto comando de linha fornecido pelo booktabs é o \cmidrule. Ele pode ser usado para traçar uma linha que não cobre toda a largura da tabela, mas apenas um conjunto específico de colunas. Um conjunto de colunas é dado como um intervalo de números: {número-número}. Mesmo se você quiser a linha apenas em uma coluna, ambos os números devem ser dados (e ser iguais, nesse caso específico):

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

\begin{document}
\begin{tabular}{lll}
  \toprule
  Animal & Comida & Tamanho \\
  \midrule
  cão    & carne  & médio   \\
  \cmidrule{1-2}
  cavalo & capim  & grande  \\
  \cmidrule{1-1}
  \cmidrule{3-3}
  sapo   & moscas & pequeno \\
  \bottomrule
\end{tabular}
\end{document}

Há outra funcionalidade útil de \cmidrule. Você pode encurtá-la em qualquer um dos lados com um argumento opcional entre parênteses:

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

\begin{document}
\begin{tabular}{lll}
  \toprule
  Animal & Comida & Tamanho \\
  \midrule
  cão    & carne  & médio   \\
  \cmidrule{1-2}
  cavalo & capim  & grande  \\
  \cmidrule(r){1-1}
  \cmidrule(rl){2-2}
  \cmidrule(l){3-3}
  sapo   & moscas & pequeno \\
  \bottomrule
\end{tabular}
\end{document}

Você deve ter adivinhado que r e l significam que a linha é encurtada no lado direito (right) e esquerdo (left), respectivamente.

Às vezes uma linha é separação demais entre duas linhas da tabela, mas para que ela não perca o significado, você pode querer separar elas de alguma forma. Nesse caso você pode usar \addlinespace para inserir um pequeno espaço vertical:

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

\begin{document}
\begin{tabular}{cp{9cm}}
  \toprule
  Animal & Descrição \\
  \midrule
  Cão    & O cão é um mamífero carnívoro da família dos canídeos, subespécie do
           lobo, e talvez o mais antigo animal domesticado pelo ser humano. \\
  \addlinespace
  Gato   & O gato é um mamífero carnívoro da família dos felídeos, muito popular
           como animal de estimação. Ocupando o topo da cadeia alimentar, é
           predador natural de diversos animais, como roedores, pássaros,
           lagartixas e alguns insetos. \\
  \bottomrule
\end{tabular}
\end{document}

Unindo células

No LaTeX você pode unir célular horizontalmente usando o comando \multicolumn. Ele deve ser a primeira coisa em uma célula. O \multicolumn leva três argumentos:

  1. O número de células que devem ser unidas
  2. O alinhamento da célula resultante
  3. O conteúdo da célula resultante

O alinhamento pode conter qualquer coisa válida no preâmbulo de um tabular, mas apenas um único tipo de coluna:

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


\begin{document}
\begin{tabular}{lll}
  \toprule
  Animal & Comida & Tamanho \\
  \midrule
  cão    & carne  & médio   \\
  cavalo & capim  & grande  \\
  sapo   & moscas & pequeno \\
  fluf   & \multicolumn{2}{c}{desconhecido} \\
  \bottomrule
\end{tabular}
\end{document}

Você também pode usar \multicolumn em uma única célula para previnir que o tipo de coluna que você definiu no preâmbulo seja usado na célula atual. O exemplo a seguir usa esse método para centralizar a linha do cabeçalho da tabela:

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


\begin{document}
\begin{tabular}{lll}
  \toprule
  \multicolumn{1}{c}{Animal} & \multicolumn{1}{c}{Comida} & \multicolumn{1}{c}{Tamanho} \\
  \midrule
  cão    & carne  & médio   \\
  cavalo & capim  & grande  \\
  sapo   & moscas & pequeno \\
  fluf   & \multicolumn{2}{c}{desconhecido} \\
  \bottomrule
\end{tabular}
\end{document}

Unir célular na vertical não é suportado no LaTeX. Geralmente é suficiente deixar células vazias para dar ao leitor a ideia correta do que conteúdo sem explicitamente juntar as linhas:

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


\begin{document}
\begin{tabular}{lll}
  \toprule
  Grupo     & Animal & Tamanho \\
  \midrule
  herbívoro & cavalo & grande  \\
            & cervo  & médio   \\
            & coelho & pequeno \\
  \addlinespace
  carnívoro & cão    & médio   \\
            & gato   & pequeno \\
            & leão   & grande  \\
  \addlinespace
  onívoro   & corvo  & pequeno \\
            & urso   & grande  \\
            & porco  & médio   \\
  \bottomrule
\end{tabular}
\end{document}

Evercícios

Use o exemplo mais simples de tabela para começar a experimentar com elas. Tente alinhamentos diferentes usando tipos de colunas l, c, e r. O que acontece se você escreve menos colunas do que declaradas em uma linha. E se tiver mais colunas do que foram declaradas? Experimente com o comando \multicolumn para unir colunas.