tabularx y textwidth
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
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}