tabularx e textwidth

Oct 01 2020

Gostaria de inserir uma tabela de 3 colunas em meu projeto, mas estou enfrentando problemas ao tentar ajustar o texto em uma célula com várias colunas. Aqui está o meu código:

\begin{center}
\begin{tabularx}{\textwidth}{|c X c|}
\hline

\multicolumn{1}{|c}{} & 
\multicolumn{2}{>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{ cell0: text text text text text text text text text text text text text text text text }\\
\hline

cell1 & cell2: text text text text text text text text & cell3\\

\hline
\end{tabularx}
\end{center}

O problema é que sempre que eu uso o comando hsize para fazer o texto caber na célula0 corretamente, a célula2 na linha seguinte perde seu ajuste automático para o texto e adquire largura fixa (o que eu não quero). Então, como posso ajustar o texto na célula0 ao mesmo tempo que a célula2 mantém o ajuste automático do texto?

Respostas

2 Mico Oct 01 2020 at 11:48

Seu cálculo da largura utilizável do objeto "cell0" está incorreto. Seria (quase) correto se ambas as colunas subjacentes fossem do tipo X; entretanto, não é esse o caso, é?

Para calcular a largura combinada utilizável das colunas 2 e 3 corretamente, sugiro que você faça o seguinte.

  • Primeiro, encontre a célula na coluna 3 que determina a largura natural dessa coluna. Isso geralmente é feito de forma fácil e confiável por inspeção visual.

  • Suponha que a célula que define a largura natural da coluna 3 consista na string aratherlongword. Sua largura pode ser determinada executando

   \newlength\colwidth
   \settowidth\colwidth{aratherlongword}
  • Então a largura combinada utilizável das colunas 2 e 3 pode ser calculada como
   \hsize=\dimexpr\hsize+\colwidth+2\tabcolsep\relax

Um MWE completo (observe que descartei, \multicolumn{1}{|c}{}pois é redundante.)

\documentclass{article}
\usepackage{tabularx}
\begin{document}

\begin{center}
\newlength\colwidth
\settowidth\colwidth{aratherlongword}
\begin{tabularx}{\textwidth}{|c X c|}
\hline
& \multicolumn{2}{>{\hsize=\dimexpr\hsize+\colwidth+2\tabcolsep\relax}X|}{%
  cell0: text text text text text text text text text text text text text text text text }\\
\hline
cell1 & cell2: text text text text text text text text & aratherlongword\\
\hline
\end{tabularx}
\end{center}
\end{document}