tabularx y textwidth

Oct 01 2020

Me gustaría insertar una tabla de 3 columnas en mi proyecto, pero tengo problemas al tratar de ajustar el texto en una celda de varias columnas. Aquí está mi 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}

El problema es que, cada vez que uso el comando hsize para que el texto se ajuste correctamente a cell0, la celda2 de la siguiente línea pierde su ajuste automático al texto y adquiere un ancho fijo (que no quiero). Entonces, ¿cómo puedo ajustar el texto en cell0 al mismo tiempo que cell2 mantiene el ajuste automático al texto?

Respuestas

2 Mico Oct 01 2020 at 11:48

Su cálculo del ancho utilizable del objeto "cell0" es incorrecto. Sería (casi) correcto si ambas columnas subyacentes fueran de tipo X; sin embargo, ese no es el caso, ¿verdad?

Para calcular correctamente el ancho combinado utilizable de las columnas 2 y 3, le sugiero que proceda de la siguiente manera.

  • Primero, busque la celda en la columna 3 que determina el ancho natural de esa columna. Por lo general, esto se hace de manera fácil y confiable mediante una inspección visual.

  • Suponga que la celda que define el ancho natural de la columna 3 consiste en la cadena aratherlongword. Su ancho se puede determinar ejecutando

   \newlength\colwidth
   \settowidth\colwidth{aratherlongword}
  • Entonces el ancho combinado utilizable de las columnas 2 y 3 se puede calcular como
   \hsize=\dimexpr\hsize+\colwidth+2\tabcolsep\relax

Un MWE completo (tenga en cuenta que lo he descartado \multicolumn{1}{|c}{}porque es 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}