tabularx и textwidth

Oct 01 2020

Я хотел бы вставить в свой проект таблицу с 3 столбцами, но у меня возникают проблемы с попыткой уместить текст в ячейку с несколькими столбцами. Вот мой код:

\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}

Проблема в том, что всякий раз, когда я использую команду hsize для правильного размещения текста в ячейке 0, ячейка 2 в следующей строке теряет автоматическую настройку текста и приобретает фиксированную ширину (что мне не нужно). Итак, как я могу настроить текст в ячейке 0 в то время, когда ячейка 2 сохраняет автоматическую настройку текста?

Ответы

2 Mico Oct 01 2020 at 11:48

Ваш расчет полезной ширины объекта "cell0" неверен. Было бы (почти) правильно, если бы оба нижележащих столбца имели тип X; однако это не так, не так ли?

Чтобы правильно рассчитать полезную комбинированную ширину столбцов 2 и 3, я предлагаю вам поступить следующим образом.

  • Сначала найдите ячейку в столбце 3, которая определяет естественную ширину этого столбца. Обычно это делается легко и надежно путем визуального осмотра.

  • Предположим, что ячейка, определяющая естественную ширину столбца 3, состоит из строки aratherlongword. Его ширину можно определить, запустив

   \newlength\colwidth
   \settowidth\colwidth{aratherlongword}
  • Тогда полезная комбинированная ширина столбцов 2 и 3 может быть рассчитана как
   \hsize=\dimexpr\hsize+\colwidth+2\tabcolsep\relax

Полный MWE (обратите внимание, что я отказался от него, \multicolumn{1}{|c}{}поскольку он избыточен).

\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}