我想创建一个这样的表格:
我使用 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 节点)。