表格绘制 ( 二 ) :进阶

表格绘制 ( 二 ) :进阶 #

作者:二花

关键词:单元格合并与分割,定宽表格

上一节,讨论了绘制表格的最基础的部分,这一节讲关于单元的合并分割以及定宽表格。

单元的合并分割 #

有时候我们会遇到要将几个单元格合并为一个单元格的情况,用如下方法

  • 对于同行不同单元格之间的合并使用命令 \multicolumn{合并单元格个数}{左对齐,居中,右对齐等选项}{单元格内容}
  • 对于同列不同单元格合并使用宏包 \multirow{行数}*{内容},注意、*一定要在
\documentclass [border={30mm 3mm 30mm 3pt}]{standalone}
\usepackage{multirow}
\usepackage{ctex}
\begin{document}
\begin{tabular}{|l|c|c|r|}
\hline
\multirow{2}*{姓名}&\multicolumn{3}{|c|}{项目}\\
\cline{2-4}
    &吃&喝&玩\\
\hline
张三&鱼&酒&吉他\\
李四&肉&水&code\\
王麻子&海鲜&饮料&羽毛球\\
\hline

\end{tabular}
\end{document}

关键点:

这个图的关键点有如下几个:

  • \multicolumn{3}{|c|}{项目}中的{|c|}连个竖线要有,默认不写时,表格内没有连线;
  • \cline{2-4} 用于合并不同行单元格之后,划出不完全或者间断的分割线的;

表格的最上方和最左侧一行可以用特别的宏包来单独控制:\makecell 宏包

​ 在、makecell{ } 中可以用 \\ 进行自由的换行

表头的斜线分割使用另一个宏包:\diagbox 宏包

  • \diagbox{左}{右}
  • \diagbox{左}{中}{右}
\documentclass [border={30mm 3pt 30mm 3pt}]{standalone}
\usepackage{multirow}
\usepackage{diagbox}
\usepackage{ctex}
\begin{document}
\begin{tabular}{|l|c|c|r|}
\hline
\diagbox{姓名}{项目}    &吃&喝&玩\\
\hline
张三&鱼&酒&吉他\\
李四&肉&水&code\\
王麻子&海鲜&饮料&羽毛球\\
\hline
\end{tabular}
\end{document}

解答请见这里https://latex.lierhua.top/docs/%E4%B9%A0%E9%A2%98%E7%AD%94%E6%A1%88/

科研论文三线表 #

一般高校的毕业论文一般会要求把表格设置为三线表,三线表顶部和底部的线比较粗,中间较细,粗细的比例由各机构规定。

三线表需要使用 booktabs 宏包:

\toprule: 顶线,有一个可选参数改变顶线的粗细、toprule[线宽]
\midrule: 中线
\bottomrule: 底线
\cmidrule: 部分中线
\documentclass [border={30mm 3pt 30mm 3pt}]{standalone}
\usepackage{diagbox}
\usepackage{booktabs}
\usepackage{ctex}
\usepackage{tabularx}
\begin{document}
\begin{tabularx}{\textwidth}{c|X|X|X|X|X|X|X}
\toprule [1mm]
% 不加[1mm]时使用默认的宽度
\diagbox{项目}{日期}&周一&周二&周三&周四&周五&周六&周天、\
\midrule
乒乓球&1&2&4&1&7&3&6\\
羽毛球&6&0&8&1&2&5&8\\
\bottomrule [1mm]
\end{tabularx}
\end{document}

\documentclass [border={30mm 3pt 30mm 3pt}]{standalone}
\usepackage{diagbox}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{ctex}
\usepackage{tabularx}
\begin{document}
\begin{tabular}{c|ccccccc}
\toprule
\multirow{2}*{\diagbox{项目}{日期}}&\multicolumn{1}{c}{男}&\multicolumn{2}{c}{女}\\
\cmidrule{2-2}\cmidrule{3-4}
    &李四&张三&王麻子\\
\midrule
乒乓球&1&2&4\\
羽毛球&6&0&8\\
\bottomrule
\end{tabular}
\end{document}

定宽表格的使用 #

LaTeX 的 tabular* 环境可以产生固定宽度的表格,我们普遍使用 tabularx 提供的 tabularx 环境来实现与 tabular* 环境一样的效果, tabularx 提供的一个称为 X 的列格式说明符 ( 与 clr 同一位置 ) 。

宏包环境如下:

\usepackage{tabularx}
\begin{tabularx}{宽度}[垂直对齐]{列格式说明 ( c,l,r,X,p{宽度} )}
%\begin{tabularx}{\textwidth}[垂直对齐]{|c|l|r|X|p{10pt}|}
\end{tabularx}
\documentclass [border={30mm 3pt 30mm 3pt}]{standalone}
\usepackage{diagbox}
\usepackage{ctex}
\usepackage{tabularx}
\begin{document}
\begin{tabularx}{\textwidth}{c|X|X|X|X|X|X|X}
\hline
\diagbox{项目}{日期}&周一&周二&周三&周四&周五&周六&周天\\
\hline
乒乓球&1&2&4&设定一个验证自动换行&7&3&6\\
羽毛球&6&0&8&1&2&5&8\\
\hline
\end{tabularx}
\end{document}

长表格的使用 #

我们之前讲过,表格其实是一个盒子,因此,不超过一页的表格其实如果他不放到一个浮动体环境中,那么会比较不适合排版的。但是长表格很长,甚至超过了一页,所以,LaTeX 有一个用于处理长表格的宏包用于处理这种情况:longtable 宏包。长表格的使用具体见 longtable 宏包。

小 tips #

CTAN 论坛提供了一个制作表格的小插件:excel2latex,大家可以去论坛查看,地址如下https://www.ctan.org/tex-archive/support/excel2latex/