Colunas com dimensão automática

No LaTeX, o ambiente tabular tem um argumento obrigatório que especifica simultaneamente o número de colunas e o alinhamento do texto nas mesmas.  Por exemplo:

\begin{tabular}{lllcr}

\end{tabular}

especifica um objeto tabular (com liberdade de expressão podemos dizer que é uma tabela) com 5 colunas, as três primeiras com conteúdos alinhados à esquerda ('l'), a quarta com conteúdos centrados e a quinta com conteúdos alinhados à direita. Note-se que apenas indicamos o número de colunas e o seu alinhamento, não a sua dimensão.  A dimensão de cada coluna é calculada automaticamente de forma a englobar o conteúdo mais longo que for esepcificado nessa coluna.

Mas às vezes queremos limitar o tamanho máximo de uma coluna, e para isso existe o elemnto 'p{<dim>}' onde '<dim>' é uma dimensão.  Por exemplo:

\begin{tabular}{lcp{5cm}}


\end{tabular}

especifica um objeto tabular com três colunas, a primeira com conteúdos alinhados à esquerda e dimensão do maior elemento que lá for colocado, a segunda com conteúdos alinhados ao centro e dimensão do maior elemento que lá for colocado, e a terceira com conteúdos justificados (como se fosse um parágrafo 'p') e com dimensão de 5cm.

Esta solução, apesar de funcionar, não permite resolver o problema comum que é: primeira coluna com conteúdos alinhados à esquerda e dimensão do maior elemento que lá for colocado, a segunda com conteúdos alinhados ao centro e dimensão do maior elemento que lá for colocado, e a terceira com conteúdos justificados e dimensão espaço restante até à berma direita da página.  Como conseguir isso?  Uma possibildade é ir experimentando várias dimensões para o argumento 'p{<dim>}' até bater-mais-ou-menos-certo.  Claro que é apenas mais-ou-menos e, se alterar algum dos dados das primeiras duas colunas, arrisca-se a ter que recalcular por tentativa-e-erro um novo valor para 'p{<dim>}'.

E há uma alernativa?

Claro que sim… em LaTeX há sempre uma alternativa!  :)

O ambiente tabularx

Normalmente para fazer uso deste ambiente, há que incluir o pacote tabularx com

\usepackage{tabularx}

no entanto, note que o template NOVAthesis é baseado no documentclass memoir e, por isso, não deve (nem pode) incluir o pacote tabularx.  O ambiente tabularx está, ainda assim, disponível e com a mesma funcionalidade que se incluísse aquele pacote.

Assim, para o exemplo acima, haveria que especificar (note o tabularx em vez de tabular):

\begin{tabularx}{\linewidth}{lcX}


\end{tabularx}

Neste caso, X representa uma coluna com conteúdos justificados e dimensão calculada automaticamente como o espaço que resta até à berma direita.

Se em vez de uma coluna quiser duas ou mais, pode utilizar tantos 'X' quantos quiser.  O espaço restante será dividido em parcelas idênticas, uma correspondendo a cada 'X'.

Um exmplo completo e um pouco mais complexo:

\documentclass[a4paper]{article}

\usepackage{tabularx}
\usepackage{booktabs}

\begin{document}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque pharetra sapien sit amet quam consequat vulputate. Aliquam erat volutpat. Pellentesque placerat nunc ac nibh tincidunt varius. Vestibulum a mauris consequat, laoreet mi vel, aliquet tortor. 

\noindent
\begin{tabularx}{\textwidth}{>{\bfseries}lX}
\toprule
Force & 
Force is a vector quantity defined as the rate of change of the momentum of the body that would be induced by that
force acting alone .\\
\midrule
Moment of a force & 
Moment of a force with respect to an origin is defined as the cross product of the position vector (with respect to the same origin) and the force .\\
\bottomrule
\end{tabularx}

Aliquam laoreet augue at nibh molestie, vitae varius quam efficitur. Aliquam et varius sem, eu rutrum est. Mauris viverra, eros in bibendum eleifend, purus risus lobortis dui, et egestas magna diam sit amet dui. Pellentesque viverra justo nec enim feugiat rutrum. Sed ac ex libero. In ultricies mollis elit, sit amet faucibus nisl pretium vitae. Sed ac arcu justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

\end{document}

Que faz uso do pacote 'booktabs' para as tabelas ficarem mais bonitas e onde o '>{\bfseries}' indica que o conteúdo da primeira coluna deverá estar em negrito (bold) e alinhado à esquerda, e que o conteúdo da seuda coluna deverá estar justificado e utilizar todo o espaço restante até à margem direita. O resultado seria este:


Nota: existe também o pacote 'tabulary' que é mais poderoso e versátil que o 'tabularx', mas também mais complexo.  Consulte o manual se lhe interessar.

Comentários

Mensagens populares deste blogue

Como forçar uma nova linha dentro de uma tabela?

Sobre o posicionamento de figuras e tabelas no documento

Gráfico ou Tabela?