Tabelas
Esta lição mostra como você pode construir tabelas no LaTeX, influenciar o alinhamento das células, adicionar bordas à 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:
tipo | descrição |
---|---|
l | coluna alinhada à esquerda |
c | coluna centralizada |
r | coluna alinhada à direita |
p{largura} | uma coluna com largura fixa; o texto será justificado e quebrado em linhas automaticamente |
m{largura} | igual a p , mas centralizado verticalmente em relação ao restante da linha da tabela |
b{largura} | igual a p , mas alinhado à base da linha |
w{alin}{largura} | escreve o conteúdo em uma largura fixa, extrapolando o espaço dado se o conteúdo for mais largo. Você pode escolher o alinhamento horizontal alin usando l , c , ou r |
W{alin}{largura} | igual a 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:
tipo | descrição |
---|---|
*{num}{símbolos} | repete símbolos no preâmbulo num vezes. Com isso você pode criar várias colunas com configuração idêntica |
>{decl} | inclui decl antes do conteúdo de cada célula da coluna a seguir (isso é útil, por exemplo, para usar uma fonte diferente para esta coluna) |
<{decl} | inclui decl depois do conteúdo de cada célula da coluna anterior |
| | adiciona uma borda 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
é a mesma coisa.
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 uma coluna da 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 o conteúdo em uma única linha com sua largura natural, mesmo se isso ultrapassar a margem. Para resolver 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 desta 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 bordas
Um conselho antes de incluir bordas em tabelas: bordas devem ser usadas com moderação em tabelas, e normalmente bordas verticais devem ser completamente evitadas. De fato, tabelas ‘profissionais’ não devem usar nenhuma das bordas padrão fornecidas pelo LaTeX; ao invés disso, você deve se familiarizar com os recursos do pacote booktabs
, e por isso começamos com ele aqui. Para constar, as bordas padrão são mostradas na página de mais informações.
O pacote booktabs
fornece quatro tipos diferentes de borda. Cada um desses comandos deve ser a primeira coisa em uma linha ou deve suceder outra borda. 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 borda fornecido pelo booktabs
é o \cmidrule
. Ele pode ser usado para desenhar um traço 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 o traço 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á-lo 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 o traço é encurtado no lado direito (right) e esquerdo (left), respectivamente.
Às vezes um traço é separação demais entre duas linhas da tabela, mas para que ela não perca o significado, você pode querer separá-las 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:
- O número de células que devem ser unidas
- O alinhamento da célula resultante
- 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 evitar 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élulas na vertical não é suportado no LaTeX. Geralmente é suficiente deixar células vazias para dar ao leitor a ideia correta do significado desejado 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.