如何在页面宽度内正确显示表格

如何在页面宽度内正确显示表格

我想在页面宽度内显示表格,左侧没有太多空间,并最小化第一列的宽度

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

在此处输入图片描述

相关内容