tabularx và text width

Oct 01 2020

Tôi muốn chèn một bảng 3 cột trong dự án của mình, nhưng tôi đang gặp phải vấn đề khi cố gắng điều chỉnh văn bản trong một ô nhiều cột. Đây là mã của tôi:

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

Vấn đề là, bất cứ khi nào tôi sử dụng lệnh hsize để làm cho văn bản vừa với ô0 đúng cách, ô2 ở dòng sau sẽ mất điều chỉnh tự động đối với văn bản và có được chiều rộng cố định (mà tôi không muốn). Vì vậy, làm cách nào để tôi có thể điều chỉnh văn bản trong ô0 cùng lúc mà ô2 vẫn giữ điều chỉnh tự động thành văn bản?

Trả lời

2 Mico Oct 01 2020 at 11:48

Việc tính toán chiều rộng có thể sử dụng của đối tượng "cell0" của bạn không chính xác. Sẽ là (gần như) đúng nếu cả hai cột bên dưới đều thuộc loại X; tuy nhiên, đó không phải là trường hợp, phải không?

Để tính toán chiều rộng kết hợp có thể sử dụng của cột 2 và 3 một cách chính xác, tôi khuyên bạn nên tiến hành như sau.

  • Đầu tiên, tìm ô trong cột 3 xác định chiều rộng tự nhiên của cột đó. Điều này thường được thực hiện dễ dàng và đáng tin cậy bằng cách kiểm tra trực quan.

  • Giả sử ô xác định chiều rộng tự nhiên của cột 3 bao gồm chuỗi aratherlongword. Chiều rộng của nó có thể được xác định bằng cách chạy

   \newlength\colwidth
   \settowidth\colwidth{aratherlongword}
  • Sau đó, chiều rộng kết hợp có thể sử dụng của cột 2 và 3 có thể được tính như
   \hsize=\dimexpr\hsize+\colwidth+2\tabcolsep\relax

Một MWE đầy đủ (lưu ý rằng tôi đã loại bỏ \multicolumn{1}{|c}{}vì nó thừa.)

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