Tabelas
- Uso básico
- Linhas horizontais
- Células com múltiplas colunas
- Linhas horizontais parciais
- Células com múltiplas linhas
- Legendas
- Posicionamento da tabela
Uso básico
Tabelas são criadas com o ambiente tabular. Esse ambiente requer um argumento obrigatório usado para configurar as colunas da tabela. Exemplo:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[brazilian]{babel}
\begin{document}
\begin{tabular}{|l|c|r|}
Nome do filósofo & Nascimento/Falecimento & Cidade natal \\
Aristóteles & 384 a.C - 322 a.C & Estagira \\
René Descartes & 1596 - 1650 & Descartes \\
Demócrito & 460 a.C - 370 a.C & Abdera
\end{tabular}
\end{document}
O &
é usado para separar as colunas da tabela e as duas barras invertidas servem para terminar
uma linha. Na última linha, não é necessário usar as duas barras. O argumento obrigatório do ambiente
tabular especifica a estrutura da tabela. As linhas verticais são separadores. As letras servem para
indicar o alinhamento das colunas: l (left / esquerda), c (center / centralizado) e
r (right / direita).
O comando \hline
é usado para traçar linhas horizontais na tabela:
\begin{tabular}{|l|c|r|}
\hline
Nome do filósofo & Nascimento/Falecimento & Cidade natal \\
\hline
Aristóteles & 384 a.C - 322 a.C & Estagira \\
René Descartes & 1596 - 1650 & Descartes \\
Demócrito & 460 a.C - 370 a.C & Abdera \\
\hline
\end{tabular}
Perceba que linhas horizontais não precisam do sinal de duas barras invertidas depois delas, e que passou a ser
necessário colocar as duas barras invertidas após a linha dos dados do filósofo Demócrito por causa da inclusão
do \hline
no final da tabela.
Veja abaixo como a última tabela é exibida em um documento compilado:

Também é possível aplicar opções para várias colunas de uma vez no argumento obrigatório do tabular. O exemplo abaixo alinha a primeira coluna à esquerda e centraliza as duas colunas restantes. Todas as colunas terão uma barra vertical depois delas.
\begin{tabular}{|l|*{2}{c|}}
O asterisco indica que as opções serão aplicadas a várias colunas. O número de colunas que serão afetadas é especificado nas chaves que vem depois do asterisco. As opções que serão aplicadas são passadas no segundo grupo de chaves.
Veja que as células do cabeçalho tem a mesma formatação das outras células. Muitas tabelas usam uma formatação diferente para essas células. Pra isso, pode ser criado um comando:
\newcommand{\hcell}[1]{\textbf{#1}}
Basta usar esse comando nas células de cabeçalho para que elas tenham uma formatação diferente.
Linhas horizontais
O pacote booktabs tem comandos para traçar linhas horizontais que são mais flexíveis e mais semânticos do
que o \hline
. O comando \toprule
traça uma linha na parte superior da tabela. Ele tem
um argumento opcional, onde dá para especificar a espessura da linha:
\toprule[1.5pt]
O comando \bottomrule
traça uma linha na parte inferior da tabela. Também há um argumento opcional
para especificar a espessura da linha.
\bottomrule[1.5pt]
O comando \midrule
traça uma linha entre duas linhas da tabela. Ele também tem um argumento
opcional para especificar a espessura da linha. Um bom lugar para usar esse comando seria após o cabeçalho, para
separar o cabeçalho do corpo da tabela:
\begin{tabular}{lcr}
\toprule[1.5pt]
Nome do filósofo & Nascimento/Falecimento & Cidade natal \\
\midrule
Aristóteles & 384 a.C - 322 a.C & Estagira \\
René Descartes & 1596 - 1650 & Descartes \\
Demócrito & 460 a.C - 370 a.C & Abdera \\
\bottomrule[1.5pt]
\end{tabular}
Veja abaixo como essa tabela é exibida em um documento compilado:

É recomendável usar esses comandos para traçar linhas na tabela ao invés do \hline
. Esses comandos
são mais semânticos e flexíveis.
Uma das formas de mudar a espessura das linhas é usando o argumento opcional, que é o que foi feito. Mas há uma forma alternativa de mudar a espessura muito melhor e mais recomendável: fazer essa mudança usando comandos no preâmbulo do documento, apenas uma vez, de forma que os valores fornecidos sejam aplicados a todas as tabelas do documento. Isso aumenta a consistência do documento e facilita a manutenção dele.
O comando \setlength
é usado para alterar a espessura das linhas da tabela:
\setlength{\heavyrulewidth}{1.5pt}
\setlength{\lightrulewidth}{1.0pt}
\setlength{\cmidrulewidth}{0.5pt}
Note que o tipo da linha que se quer alterar é informado no primeiro argumento do comando. O comando
\heavyrulewidth
é informado para alterar a espessura das linhas superior e inferior; já o comando
\lightrulewidth
cuida da espessura das linhas criadas com \midrule
e o
\cmidrulewidth
cuida das linhas criadas com \cmidrule
(que é um comando que você verá
daqui a pouco, na seção Linhas parciais).
Usando o pacote array e usando novamente o comando \setlength
, também dá para aumentar a
altura da linha:
\usepackage{array}
...
\setlength{\extrarowheight}{5pt}
Células com múltiplas colunas
Às vezes, pode fazer sentido fazer com que uma célula ocupe mais de uma coluna. Essa necessidade é mais comum no cabeçalho da tabela. O exemplo abaixo altera a tabela de filósofos, colocando duas linhas no cabeçalho, sendo que as colunas nascimento e cidade natal passam a ser vizinhas, o nome da coluna de nascimento muda para Data e as duas colunas são unidas pelo tema em comum que elas tem, que é o nascimento. O falecimento é deslocado para a última coluna. Veja abaixo como a tabela ficou:
\begin{tabular}{lccr}
\toprule[1.5pt]
Nome do filósofo & \multicolumn{2}{c}{Nascimento} & Falecimento \\
& Data & Cidade & \\
\midrule
Aristóteles & 384 a.C & Estagira & 322 a.C \\
René Descartes & 1596 & Descartes & 1650 \\
Demócrito & 460 a.C & Abdera & 370 a.C \\
\bottomrule[1.5pt]
\end{tabular}
A única célula que ocupa mais de uma coluna é a Nascimento. O comando \multicolumn
é usado
para esse fim. O primeiro argumento informado é o número de colunas que a célula ocupará. O segundo é o
alinhamento da coluna (podem ser usadas as mesmas opções de alinhamento passadas como argumento ao ambiente
tabular) e o último argumento é o texto da coluna.
Linhas horizontais parciais
Também é possível traçar linhas parciais, que não ocupam a linha inteira, indo de uma coluna m até uma coluna n.
Existe um comando nativo do LaTeX que faz isso: é o comando \cline
. Porém, ele não será coberto
aqui, porque há um comando bem melhor para o mesmo fim, que é o \cmidrule
. Ele tem um argumento
opcional, passado entre parênteses, que serve para cortar um pedaço do começo ou fim da linha ou de ambos.
Para cortar um pedaço do começo da linha, você passa l, e para cortar um pedaço do final da linha, você passa r. Você também pode passar lr para cortar os dois ao mesmo tempo.
O comando \cmidrule
também tem um argumento obrigatório, no qual você informa a coluna onde a linha
deve começar a ser traçada e a coluna onde a linha deve terminar de ser traçada, separando as duas por hífen.
Veja abaixo um exemplo de uso do comando:
\cmidrule(r){1-1}
\cmidrule(lr){2-3}
\cmidrule(l){4-4}
Também dá pra controlar o quanto será cortado:
\cmidrule(r{10pt}){1-1}
Note que o argumento opcional do comando \cmidrule
é informado entre parênteses. O mais comum é os
argumentos opcionais do comando serem fornecidos entre colchetes, mas isso não vale para todos os comandos.
Células com múltiplas linhas
Você já viu como fazer com que uma célula ocupe várias colunas. Também podem acontecer situações onde você pode querer que uma célula ocupe várias linhas. Para isso, basta usar o pacote multirow e o comando que tem o mesmo nome. No exemplo abaixo, foi adicionado um filósofo francês à tabela de filósofos, e os filósofos foram divididos em gregos e franceses:
\begin{tabular}{llccr}
\toprule[1.5pt]
& Nome do filósofo & \multicolumn{2}{c}{Nascimento} & Falecimento \\
& & Data & Cidade & \\
\midrule
\multirow{2}{*}{Gregos} & Aristóteles & 384 a.C & Estagira & 322 a.C \\
& Demócrito & 460 a.C & Abdera & 370 a.C \\
\multirow{2}{*}{Franceses} & René Descartes & 1596 & Descartes & 1650 \\
& Michel Foucault & 1926 & Poitiers & 1984 \\
\bottomrule[1.5pt]
\end{tabular}
O primeiro argumento do comando \multirow
define quantas linhas a célula ocupará. O segundo define
a largura da célula. No caso, o asterisco quer dizer que a célula não terá largura definida, delegando a
responsabilidade de definir a largura da célula ao LaTeX. Por fim, o último argumento é o texto da célula.
Legendas
O comando \caption
é usado para colocar uma legenda na tabela. Porém, além de usar esse comando, o
ambiente tabular precisa ser envolvido no ambiente table. A legenda é colocada dentro desse
ambiente também, fora do tabular:
\begin{table}
\begin{tabular}
...
\end{tabular}
\caption{Tabela de filósofos}
\end{table}
O comando \caption
aceita um argumento opcional, onde você pode fornecer uma versão mais curta das
legendas das tabelas, que é usada caso você imprima no seu documento uma lista de tabelas. Exemplo:
\caption[Filósofos]{Tabela de filósofos}
Posicionamento da tabela
O ambiente table tem um argumento opcional para especificar opções de posicionamento da tabela. Isso é necessário porque ele é um ambiente flutuante, o que quer dizer que não necessariamente ele aparecerá na posição em que ele foi colocado. Compile e veja o documento abaixo:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[brazilian]{babel}
\usepackage{lipsum}
\begin{document}
\lipsum
\begin{table}
\begin{tabular}{|l|c|r|}
Nome do filósofo & Nascimento/Falecimento & Cidade natal \\
Aristóteles & 384 a.C - 322 a.C & Estagira \\
René Descartes & 1596 - 1650 & Descartes \\
Demócrito & 460 a.C - 370 a.C & Abdera
\end{tabular}
\end{table}
\end{document}
Como você pode ver, a tabela não foi impressa depois do \lipsum
. Ela ficou no topo da segunda
página, no meio do \lipsum
. Para corrigir isso, é só usar o argumento opcional do table para
pedir ao LaTeX que ele posicione a tabela onde ela foi colocada. Para fazer isso, será a usada opção h
(here):
\begin{table}[h]
Agora, o LaTeX realmente colocou a tabela onde ela foi inserida, ou seja, depois do \lipsum
. Esse
comando aceita também outras opções como t (top), b (bottom) e p (page). Essa última coloca
a tabela em uma página só para ambientes flutuantes. Também é possível usar a exclamação para aumentar a
importância do pedido, antes de uma ou mais opções. Exemplo:
\begin{table}[!hb]
O comando acima informa ao LaTeX que é muito importante que a imagem fique onde ela foi colocada, mas se não for possível, seria bom que ela fosse colocada na parte de baixo da página, como uma segunda opção.