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 que define a estrutura da tabela.
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[brazilian]{babel}
\begin{document}
\begin{tabular}{|l|c|r|} % As linhas verticais são separadores. As letras indicam o alinhamento das colunas
Nome do filósofo & Nascimento/Falecimento & Cidade natal \\ % O & é usado para separar as colunas
Aristóteles & 384 a.C - 322 a.C & Estagira \\
René Descartes & 1596 - 1650 & Descartes \\
Demócrito & 460 a.C - 370 a.C & Abdera % Na última linha, não é necessário usar as duas barras.
\end{tabular}
\end{document}
A tabela abaixo mostra as letras que podem ser usadas no alinhamento das colunas da tabela:
Letra | Descrição |
---|---|
l | Left (esquerda) |
c | Center (centralizado) |
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. Note que agora a linha dos dados do último filósofo tem duas barras invertidas no final dela como as outras. Isso passou a ser necessário porque a linha deixou de ser a última, por causa da linha horizontal adicionada ao final da tabela.
É 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|}}
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}
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 fazer isso, é só criar um comando e usá-lo nas células do cabeçalho:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[brazilian]{babel}
\newcommand{\hcell}[1]{\textbf{#1}} % deixa as células do cabeçalho em negrito
\begin{document}
\begin{tabular}{|l|*{2}{c|}}
\hcell{Nome do filósofo} & \hcell{Nascimento/Falecimento} &\hcell{Cidade natal} \\
Aristóteles & 384 a.C - 322 a.C & Estagira \\
René Descartes & 1596 - 1650 & Descartes \\
Demócrito & 460 a.C - 370 a.C & AbderaS
\end{tabular}
\end{document}
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
. Cada um deles tem um argumento opcional para especificar a espessura da linha.
Comando | Descrição |
---|---|
\toprule |
Traça uma linha na parte superior da tabela |
\bottomrule |
Traça uma linha na parte inferior da tabela |
\midrule |
Traça uma linha entre duas linhas da tabela |
O exemplo abaixo usa todas essas linhas:
\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}
É 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.
A alteração é feita apenas uma vez com o comando \setlength
, de forma que os valores fornecidos
sejam aplicados a todas as tabelas do documento. Isso aumenta a consistência e facilita a manutenção do
documento.
\setlength{\heavyrulewidth}{1.5pt}
\setlength{\lightrulewidth}{0.7pt}
\setlength{\cmidrulewidth}{0.5pt}
O tipo da linha que se quer alterar é informado no primeiro argumento do comando. Veja a qual linha cada comando se refere:
Linha | Descrição |
---|---|
\heavyrulewidth |
Linhas superior e inferior |
\lightrulewidth |
Linhas criadas com \midrule |
\cmidrulewidth |
Linhas criadas com \cmidrule . Será visto 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:
\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. 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 \cline
. Porém, ele não será
coberto aqui, porque há um comando bem melhor para o mesmo fim, que é o \cmidrule
:
\begin{tabular}{lccr}
\toprule[1.5pt]
Nome do filósofo & \multicolumn{2}{c}{Nascimento} &Falecimento \\
& Data & Cidade & \\
\cmidrule(r){1-1} \cmidrule(lr){2-3} \cmidrule(l){4-4}
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}
O argumento passado entre parênteses é opcional. O mais comum é fornecer os argumentos opcionais entre colchetes, mas isso não vale para todos os comandos. No caso desse comando, o argumento opcional é passado entre parênteses. Ele serve para cortar um pedaço da linha. O que será cortado depende da letra usada no argumento:
Letra | Efeito |
---|---|
l | Corta um pedaço do começo da linha |
r | Corta um pedaço do fim da linha |
lr | Corta um pedaço do começo e do fim da linha |
Também dá pra controlar o quanto será cortado:
\cmidrule(r{10pt}){1-1}
O argumento obrigatório informa a coluna onde a linha deve começar a ser traçada e a coluna onde ela deve terminar de ser traçada, separando as duas por hífen. No exemplo acima, a linha é traçada apenas na 1ª coluna.
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. O pacote multirow é usado para esse fim:
\usepackage{multirow}
...
\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
é o número de linhas que a célula ocupará. O segundo é
a largura da célula. O asterisco significa que a célula não terá largura definida. Isso faz com que o LaTeX
defina a largura da célula automaticamente. 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 uma lista de tabelas no seu documento. 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[1-3]
\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 colocou a tabela onde ela foi inserida, ou seja, depois do \lipsum
. Além do
h, também podem ser usadas outras opções:
Opção | Descrição |
---|---|
t | top (superior) |
b | bottom (inferior) |
p | page. 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:
\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.