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}