我想在页面宽度内显示表格,左侧没有太多空间,并最小化第一列的宽度
\documentclass{article}
\usepackage{multirow}
\usepackage[table,xcdraw]{xcolor}
\usepackage{makecell}
\begin{document}
\begin{table}[t]
\begin{tabular}{|p|c|p|p{4cm}|}
\hline
\multicolumn{2}{|c|}{} &
\multicolumn{2}{c|}{\textbf{Big Title}} \\
\cline{3-4}
\multicolumn{2}{|c|}{\multirow{-2}{*}{}} &
\multicolumn{1}{c|}{Second Title} &
Third Title \\
\hline
\multicolumn{1}{|c|}{} &
\textbf{Description (Part one)} &
\multicolumn{1}{c|}{values and text, values and text, values and text, values and text, values and text, values and text} &
values and text, values and text, values and text, values and text, values and text, values and text, values and text \\
\cline{2-4}
\multicolumn{1}{|c|}{\multirow{-2}{*}{\makecell{A lot of description}}} &
\textbf{Description (Part Two)} &
\multicolumn{1}{c|}{values and text, values and text, values and text} &
values and text, values and text, values and text, values and text, values and text, values and text \\
\hline
\multicolumn{2}{|c|}{\textbf{Important characteristics}} &
\multicolumn{1}{c|}{{\color[HTML]{FE0000} values and text, values and text, values and text}} &
{\color[HTML]{009901} values and text, values and text, values and text, values and text, values and text, values and text} \\
\hline
\end{tabular}
\end{table}
\end{document}
谢谢
答案1
这是一个与 Zarko 的解决方案类似的解决方案,但使用了tabularray
包,它有一个很好的新界面,使复杂的表格更容易处理。参见其文档。
我已将前两列设置为不同的固定宽度(根据需要进行调整),并使后两列可扩展,使用系数(co=3
/ co=5
)使第四列的大小为第三列的 3/5,但同样,根据需要进行调整。
\documentclass{article}
\usepackage{xcolor}
\usepackage{tabularray}
\usepackage{lipsum}% dummy text; to show it fits
\definecolor{myred}{HTML}{FE0000}
\definecolor{mygreen}{HTML}{009901}
\begin{document}
\lipsum[1][1-3]
\begin{table}[t]
\begin{tblr}{
colspec={Q[c,wd=1cm]Q[c,wd=2cm]% first two columns have fixed widths, centered
X[c,co=5]X[l,co=3]},% third and forth columns expandable, fourth is 3/5ths the third and left-aligned
rows = {font=\small},% use a smaller font (optional, but will fit better)
width=\textwidth,% set width of table to that of text
vlines,hlines% lines everywhere
}
%% first header row
\SetCell[c=2,r=2]{c} & &
\SetCell[c=2]{c} \textbf{Big Title} & \\
%% second header row
& & Second Title & Third title \\
%% first content row
\SetCell[r=2]{c}{A lot of description} &
\textbf{Description (Part one)} &
values and text, values and text, values and text, values and text, values and text, values and text
&
values and text, values and text, values and text, values and text, values and text, values and text, values and text
\\
% second content row
&
\textbf{Description (Part Two)}
&
values and text, values and text, values and text
&
values and text, values and text, values and text, values and text, values and text, values and text
\\
% last content row
\SetCell[c=2]{c,wd=3cm} \textbf{Important characteristics} & &
\SetCell{fg=myred} values and text, values and text, values and text &
\SetCell{fg=mygreen} values and text, values and text, values and text, values and text, values and text, values and text
\end{tblr}
\end{table}
\end{document}
答案2
你的 MWE 有很多错误:
- 在列规范中,列
p
必须具有定义的列宽。 multicolumn{1}{|c|{ {...}
在类型为的列中使用p
(或X
,如果X
在中定义的列tabularx
用于覆盖列规范,因此单元格的内容在一行(很长)中,并且表格溢出文本块右边框- 您使用的
makecell
没有意义,可以省略。 multirow
您的案例中的单元格应具有规范\multirow{...}{?}{ ... text ...}
。在这种情况下,单元格的宽度将与列规范中指定的宽度相同
一个可能的解决方案,使用的tabularx
包可以是:
\documentclass{article}
\usepackage[table,xcdraw]{xcolor}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{multirow}
\usepackage{tabularx}
\begin{document}
\begin{table}[t]
\begin{tabularx}{\textwidth}{|>{\hsize=0.8\hsize}X
|>{\hsize=0.8\hsize}X
|>{\hsize=1.2\hsize}X
|>{\hsize=1.2\hsize}X|}
\hline
\multicolumn{2}{|c|}{} &
\multicolumn{2}{c|}{\textbf{Big Title}} \\
\cline{3-4}
\multicolumn{2}{|c|}{\multirow{-2}{*}{}} &
\multicolumn{1}{c|}{Second Title} &
Third Title \\
\hline
\multicolumn{1}{|c|}{} &
\textbf{Description (Part one)} &
values and text, values and text, values and text, values and text, values and text, values and text &
values and text, values and text, values and text, values and text, values and text, values and text, values and text \\
\cline{2-4}
\multirow{-2}{=}{A lot of descriptio} &
\textbf{Description (Part Two)} &
values and text, values and text, values and text &
values and text, values and text, values and text, values and text, values and text, values and text \\
\hline
\multicolumn{2}{|c|}{\textbf{Important characteristics}} &
\color[HTML]{FE0000} values and text, values and text, values and text &
\color[HTML]{009901} values and text, values and text, values and text, values and text, values and text, values and text \\
\hline
\end{tabularx}
\end{table}
\end{document}
(红线表示文本块的边框)
附录:
还有一个使用tabularray
包的版本(由版本 2022C 测试)。与 @frabjous 答案 (+1) 非常相似,但代码略短:
\documentclass{article}
\usepackage{microtype}
\usepackage[xcdraw]{xcolor}
\usepackage{tabularray}
\begin{document}
\begin{table}[t]
\begin{tblr}{hlines, vlines,
colspec = {X[0.6, l] X[0.8, l, font=\bfseries] *{2}{X[1.3, j]}},
row{1} = {font=\bfseries},
hspan = minimal}
%
\SetCell[c=2, r=2]{c}
& & \SetCell[c=2]{c} Big Title
& \\
& & Second Title
& Third Title \\
\SetCell[r=2]{c} A lot of description
& Description (Part one)
& values and text, values and text, values and text, values and text, values and text, values and text
& values and text, values and text, values and text, values and text, values and text, values and text, values and text
\\
& Description (Part Two)
& values and text, values and text, values and text
& values and text, values and text, values and text, values and text, values and text, values and text
\\
\SetCell[c=2]{c, font=\bfseries} Important characteristics
& & \SetCell{fg=red} values and text, values and text, values and text
& \SetCell{fg=green} values and text, values and text, values and text, values and text, values and text, values and text \\
\end{tblr}
\end{table}
\end{document}