使用 tabularx 時計算 \multicolumn 大小的正確方法是什麼?

使用 tabularx 時計算 \multicolumn 大小的正確方法是什麼?

p{}確定正確尺寸以\multicolumn獲取正確尺寸所需的正確方法是什麼?

問題是這樣的:我想使用tabularx並且也使用\multicolumn.為此,我必須為 \multicolumn 指定要使用的精確大小。這就是問題所在。在複雜的表中,我可以將一個表放在另一個表中,並且一行擴展到幾列,計算變得越來越困難。

計算出正確的大小變得更加困難,如果我稍後更改表格,我必須再次更改程式碼。

下面的第一個範例顯示 X 不能與 \multicolumn 一起使用以使其擴展到多個列:

\documentclass[10pt,notitlepage]{article}%
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{lipsum}
\setlength{\parindent}{0pt}
\begin{document}

\begin{tabularx}{\textwidth}{@{}|l|Y|@{}}\hline
 column 1 &
 {\begin{tabularx}{\linewidth}{@{}Y|Y|Y@{}}\hline
      \lipsum[75] & \lipsum[75] &  \lipsum[75] \\\hline
      \multicolumn{3}{X}{\lipsum[75]}
  \end{tabularx}
 }
 \\\hline
\end{tabularx}
\end{document}

數學圖形

所以不得不用p{}。沒有什麼可以讓它延伸到其他列。

p想要一個尺寸。經過一番嘗試和錯誤後,這是一個接近所需尺寸的尺寸

\documentclass[10pt,notitlepage]{article}%
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{lipsum}
\setlength{\parindent}{0pt}
\begin{document}

\begin{tabularx}{\textwidth}{@{}|l|Y|@{}}\hline
 column 1 &
 {\begin{tabularx}{\linewidth}{@{}Y|Y|Y@{}}\hline
       \lipsum[75] &  \lipsum[75] &   \lipsum[75] \\\hline
      \multicolumn{3}
        %this calculation below is needed, and not sure if it is correct now
        {p{.9\dimexpr \textwidth-4\arrayrulewidth-8\tabcolsep\relax}}{\lipsum[75]}
  \end{tabularx}
 }
 \\\hline
\end{tabularx}
\end{document}

數學圖形

好吧,現在好多了。但如果我以後改變一些東西,.9我確信我必須改變其他東西。

問題是:這真的是在 Latex 中應該做的事情嗎?看起來 Latex 應該有辦法自動執行此操作。我是否應該考慮更好的方法而不是上面所做的?

上面是一個小例子。我想使用 tabularx 並在裡面還有其他 tabularx 表。所以這很快就會變得複雜。

答案1

這裡不需要多列,您的文字只是外部表列的整個寬度的一個段落。 (順便說一句,正如我之前評論的那樣,我不會將 tabularx 用於內部列:在每列都是一X列的表中,您提前知道列寬,因此無需讓 tabularx 計算出它們(儘管有用) 。

\documentclass[10pt,notitlepage]{article}%
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{lipsum}
\setlength{\parindent}{0pt}
\begin{document}

\begin{tabularx}{\textwidth}{@{}|l|Y|@{}}\hline
 column 1 &
 {\begin{tabularx}{\linewidth}{@{}Y|Y|Y@{}}\hline
       \lipsum[75] &  \lipsum[75] &   \lipsum[75] \\\hline
  \end{tabularx}
 }

\lipsum[75]
 \\\hline
\end{tabularx}
\end{document}

答案2

這是達到目的的一種方式。每個單列的預設大小為\hsize。要更改它,請使用>{\setlength\hsize{1\hsize}}.至於3列寬度,則需要設定為基本值的3倍,\hsize因為佔用了3列。

在此輸入影像描述

代碼:

\documentclass[10pt,notitlepage]{article}%
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{lipsum}
\setlength{\parindent}{0pt}
\begin{document}

\begin{tabularx}{\textwidth}{@{}|l|Y|@{}}\hline
 column 1 &{
\begin{tabularx}{\linewidth}{Y|Y|Y}%
\lipsum[75] &\lipsum[75] & \lipsum[75] \\ \hline
\multicolumn{3}{>{\centering\setlength\hsize{3\hsize}}Y}{\lipsum[75]}
\end{tabularx}}\\ \hline
\end{tabularx}
\end{document}

相關內容