表生成问题

表生成问题

我想创建一个这样的表格:

在此处输入图片描述

我使用 tablesgenerator.com 来制作它并得到以下代码:

\begin{table}[]
\centering
\caption{My caption}
\label{my-label}
\begin{tabular}{cllll}
\hline
\multicolumn{2}{l}{\multirow{2}{*}{\textbf{\begin{tabular}[c]{@{}l@{}}list of targets -\textgreater\\ |list of sources\end{tabular}}}} & \multicolumn{3}{c}{\textbf{targets}}                                                                                                               \\ \cline{3-5} 
\multicolumn{2}{l}{}                                                                                                                   & \textbf{target1} & \textbf{target2 (additional info)} & \textbf{target3 (additional info)}                                                         \\ \cline{1-2}
\multirow{3}{*}{\textbf{sources}}            & \textbf{source1}                                                                        & description 10   & description 11                     & description 12                                                                             \\
                                             & \textbf{\begin{tabular}[c]{@{}l@{}}source2\\ (additional info)\end{tabular}}            & description 20   & description 21                     & \begin{tabular}[c]{@{}l@{}}description 22,\\ description 23,\\ description 24\end{tabular} \\
                                             & \textbf{source3}                                                                        & description 30   & description 31                     & \begin{tabular}[c]{@{}l@{}}description 32,\\ description 33,\\ description 34\end{tabular} \\ \cline{2-5} 
\end{tabular}
\end{table}

但最终的结果是这样的:

在此处输入图片描述

它超出了页面边框并且看起来与源表一点也不相似。

有人能帮我让它看起来像第一张图片那样吗?

答案1

一些建议:

  • 不要在表格中使用垂直线(真的没必要!),使用较少但间距适当的水平线。空白可以成为一种出色但不显眼(因此也是出色的)视觉分隔线。

  • 不要过度使用粗体和颜色作为突出显示设备。(“当所有内容都突出显示时,什么都没有突出显示……”)请为标题行提供简单且适当的结构。设计良好的表格会在标题和正文中传达信息。如果您过分强调标题中的内容,则读者可能会忽略表格正文中的内容。

  • 除非别无选择,否则不要将文本旋转 90 度。人们普遍不喜欢伸长脖子来操作。

  • 选择描述性标题,而不是“我的标题”。你能想出比“来源”和“目标”更好、更具描述性的术语吗?简洁是好的,但不要太简洁。

  • 如果一张布局简洁朴素的桌子无法传达你想要传达的信息,不要通过视觉上装饰桌子来做出反应。相反,冷静地问问自己可以做些什么来改善内容表格。例如,表格是否太长、太杂乱或充斥着无关内容?如果是,请立即修复这些问题。

这些想法在下面的代码中实现。它使用一个tabularx环境,并且所有四列都设计为等宽。

在此处输入图片描述

\documentclass{article}
\usepackage{booktabs,tabularx,ragged2e}
\newcolumntype{Y}{>{\RaggedRight\arraybackslash}X}
\usepackage[skip=0.333\baselineskip]{caption}

\begin{document}
\begin{table}
\caption{Sources and targets}
\begin{tabularx}{\textwidth}{@{}*{4}{Y}@{}}
%% table header
\toprule
Sources & \multicolumn{3}{c@{}}{Targets} \\
\cmidrule(l){2-4}
        & Target 1 & Target 2 & Target 3 \\
\midrule
%% body of table
Source 1 & Description 10 
         & Description 11 
         & Description 12 \\
\addlinespace % <-- use whitespace as a simple yet very effective divider
Source 2 (additional info) 
         & Description 20 
         & Description 21
         & Description 22, Description 23, Description 24 \\
\addlinespace % ditto
Source 3 & Description 30 
         & Description 31
         & Description 32, Description 33, Description 34 \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}

答案2

如果我理解正确的话,这就是你所缺少的(我改编了 Mico 的代码)

在此处输入图片描述

\documentclass{article}
\newcolumntype{Y}{>{\RaggedRight\arraybackslash}X}
\usepackage[skip=0.333\baselineskip]{caption}
\usepackage{multirow}
\usepackage{graphicx}
\begin{document}
\begin{table}
\caption{Sources and targets}
\begin{tabularx}{\textwidth}{p{1cm}@{}*{4}{Y}@{}}
%% table header
\toprule
\multicolumn{2}{r@{}}{List targets} $\rightarrow$ & \multicolumn{3}{c@{}}{Targets} \\
\cmidrule(l){3-5}
\multicolumn{2}{l@{}}{$\downarrow$ Sources}  & Target 1 & Target 2 & Target 3 \\
\midrule
%% body of table
\multirow{3}{2cm}{\rotatebox{90}{\parbox{\linewidth}{sources}}} &Source 1 & Description 10 
         & Description 11 
         & Description 12 \\
\addlinespace % <-- use whitespace as a simple yet very effective divider
&Source 2 (additional info) 
         & Description 20 
         & Description 21
         & Description 22, \par
           Description 23, \par
           Description 24 \\
\addlinespace % ditto
&Source 3 & Description 30 
         & Description 31
         & Description 32, \par 
           Description 33, \par 
           Description 34 \\    
\bottomrule
\end{tabularx}
\end{table}
\end{document}

答案3

如果您想要一张像 OP 图片中那样的表格,这里有一种方法niceamtrix

\documentclass{article}
\usepackage{nicematrix}


\begin{document}

\NiceMatrixOptions{cell-space-limits=2pt}

\begin{NiceTabular}{>{\bfseries}l>{\bfseries}llll}[hvlines]
\CodeBefore
  \rectanglecolor[gray]{0.9}{1-1}{5-2}
  \rectanglecolor[gray]{0.9}{1-2}{2-5}
\Body
\Block{2-2}{}
& \Block[r]{}{\bfseries List targets $\to$}& \Block{1-3}{\bfseries targets} \\
\rlap{$\downarrow$ \bfseries Sources}
& & \bfseries Target 1 & \Block{}<\bfseries>{Target 2\\ (additional info)} & \Block{}<\bfseries>{Target 3\\ (additional info)} \\
\Block{3-1}{\rotate sources} & Source 1 & Description 10 & Description 11 & Description 12 \\
& \Block{}{Source 2\\ (additional info)} & Description 20 & Description 21 & \Block{}{Description 22,\\ Description 23,\\ Description 24} \\
& Source 3 & Description 30 & Description 31 & \Block{}{Description 32,\\ Description 33,\\ Description 34}
\end{NiceTabular}

\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

上述代码的输出

相关内容