我有以下 MWE
\documentclass[letterpaper,12pt,oneside,onecolumn,draft,openany]{report}
\usepackage{caption}
\usepackage{wrapfig, subcaption, siunitx, booktabs, multirow}
\usepackage{graphicx}
\usepackage{float}
\begin{document}
\begin{table}[!htb]
\begin{subtable}{.60\linewidth}
\centering
\begin{tabular}{c|l|c|c|c|c}
\toprule
\parbox[t]{2mm}{\multirow{5}{*}{\rotatebox[origin=c]{90}{age group of susceptible person}}} & & \multicolumn{4}{c}{age group of infectious person} \\
& & \textbf{0-2} & \textbf{2-5} & \textbf{5-10} & ≥\textbf{10} \\
\cmidrule(lr{1em}){2-6}
& \textbf{0-2} & 2.11 & 0.15 & 0.53 & 0.03 \\
& \textbf{2-5} & 0.55 & 0.40 & 0.50 & 0.12 \\
& \textbf{5-10} & 0.56 & 3.68 & 3.61 & 0.13 \\
& \textbf{>10} & 0.55 & 0.55 & 0.81 & 1.43 \\
\toprule
\end{tabular}
\end{subtable}%
\begin{subtable}{.60\linewidth}
\centering
%\caption{}
\begin{tabular}{c|l|c|c|c|c}
\toprule
\parbox[t]{2mm}{\multirow{5}{*}{\rotatebox[origin=c]{90}{age group of agent $i$}}} & & \multicolumn{4}{c}{age group of infectious person} \\
& & \textbf{0-2} & \textbf{2-5} & \textbf{5-10} & ≥\textbf{10} \\
\cmidrule(lr{1em}){2-6}
& \textbf{0-2} & 0.75 & 0.80 & 0.98 & 1.0 \\
& \textbf{2-5} & 0.35 & 0.60 & 0.92 & 1.0 \\
& \textbf{5-10} & 0.07 & 0.53 & 0.98 & 1.0 \\
& \textbf{>10} & 0.17 & 0.33 & 0.57 & 1.0 \\
\toprule
\end{tabular}
\end{subtable}
\caption{caption}
\end{table}
\end{document}
产生
有没有办法让这些表格看起来更好?特别是,
- 有没有办法让旋转 90 度的文本换行?我尝试创建第二个空列,但出现错误。
- 有没有办法调整“数据”列的大小...您会看到“10”列比其他列略大。
答案1
如果我正确理解了你的问题,那么你正在寻找类似这样的内容:
用于旋转第一列中的文本的包makecell
和rotating
:
\documentclass[letterpaper,12pt]{report}
\usepackage{geometry}
\usepackage{siunitx}
\usepackage{booktabs, makecell, multirow, rotating}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{subcaption}
\begin{document}
\begin{table}[!htb]
\settowidth\rotheadsize{age group of}
\setlength\tabcolsep{4pt}
\begin{subtable}{.48\linewidth}
\centering
\begin{tabular}{ c >{\bfseries}l *{4}{S[table-format=1.2]} }
\toprule
& & \multicolumn{4}{c}{\makecell{age group of\\ infectious person}} \\
\cmidrule{3-6}
& & \textbf{0-2} & \textbf{2-5} & \textbf{5-10} & ≥\textbf{10} \\
\midrule
\multirow[t]{4}{*}[-3ex]{\rothead{age group of susceptible person}}
& 0-2 & 2.11 & 0.15 & 0.53 & 0.03 \\
& 2-5 & 0.55 & 0.40 & 0.50 & 0.12 \\
& 5-10 & 0.56 & 3.68 & 3.61 & 0.13 \\
& >10 & 0.55 & 0.55 & 0.81 & 1.43 \\
\bottomrule
\end{tabular}
\end{subtable}
\hfill
\begin{subtable}{.48\linewidth}
\centering
\begin{tabular}{ c >{\bfseries}l *{3}{S[table-format=1.2]} S[table-format=1.1]}
\toprule
& & \multicolumn{4}{c}{\makecell{age group of\\ infectious person}} \\
\cmidrule{3-6}
& & \textbf{0-2} & \textbf{2-5} & \textbf{5-10} & ≥\textbf{10} \\
\midrule
\multirow[t]{4}{*}[-3ex]{\rothead{age group of infectious person}}
& 0-2 & 0.75 & 0.80 & 0.98 & 1.0 \\
& 2-5 & 0.35 & 0.60 & 0.92 & 1.0 \\
& 5-10 & 0.07 & 0.53 & 0.98 & 1.0 \\
& >10 & 0.17 & 0.33 & 0.57 & 1.0 \\
\bottomrule
\end{tabular}
\end{subtable}
\caption{caption}
\end{table}
\end{document}
正如您所看到的,我删除了所有垂直线。它们不能很好地与booktabs
包中定义的规则配合使用。数字也使用包S
中的列。siunutx
编辑:一些额外的解释:
c >{\bfseries}l *{4}{S[table-format=1.2]}
是表格列布局的定义(而不是你的c|l|c|c|c|c
\rothead{...}
是来自makecell
包的宏。它被设计用于将表格单元格的内容旋转到所需的角度。对于旋转还必须加载包rotating
。宽度
\rotcell
由textlonger设置\settowidth\rotheadsize{age group of}
,以便将此文本宏分成更多行。有关详细信息,请参阅 makecell 包的文档
S
列类型在包中定义siunitx
。它允许在小数点处对齐表列中的数字。带选项[table-format=1.2]
为整数保留一位数字,为小数保留两位数字。有关详细信息,请参阅包文档中的第 5.14 节- 表示法
*{4}{S[table-format=1.2]}
表示表中有四列S[table-format=1.2]
means that in this column all contents are in boldface fonts. with it you not need to use
此列的每个单元格中均使用符号 >{\bfseries}l \texrbf{...}。