tabularx i textwidth
Chciałbym wstawić do projektu tabelę z trzema kolumnami, ale mam problemy z dopasowaniem tekstu do komórki o objętości wielokolumnowej. Oto mój kod:
\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}
Problem polega na tym, że za każdym razem, gdy używam polecenia hsize, aby poprawnie dopasować tekst do komórki 0, komórka 2 w następnym wierszu traci automatyczne dostosowanie do tekstu i uzyskuje stałą szerokość (której nie chcę). Jak więc mogę dostosować tekst w cell0 w tym samym czasie, gdy cell2 zachowuje automatyczne dopasowanie do tekstu?
Odpowiedzi
Obliczenie użytecznej szerokości obiektu „cell0” jest nieprawidłowe. Byłoby (prawie) poprawne, gdyby obie kolumny bazowe były typu X; jednak tak nie jest, prawda?
Aby poprawnie obliczyć użyteczną łączną szerokość kolumn 2 i 3, proponuję postępować w następujący sposób.
Najpierw znajdź komórkę w kolumnie 3, która określa naturalną szerokość tej kolumny. Zwykle odbywa się to łatwo i niezawodnie poprzez kontrolę wzrokową.
Załóżmy, że komórka definiująca naturalną szerokość kolumny 3 składa się z ciągu
aratherlongword. Jego szerokość można określić biegiem
\newlength\colwidth
\settowidth\colwidth{aratherlongword}
- Następnie użyteczną łączną szerokość kolumn 2 i 3 można obliczyć jako
\hsize=\dimexpr\hsize+\colwidth+2\tabcolsep\relax
Pełne MWE (pamiętaj, że odrzuciłem, \multicolumn{1}{|c}{}ponieważ jest zbędne).
\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}