
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}