前言
由于毕设开题报告是用 写的,当时在画表格的时候由于表格太大,只能在 里画完再截图放进 中,但是显示的结果还是不尽人意。正好之前在做互信息介绍的整理时学习了 的基础。因此这次在写毕设论文前两章时就又拿 来写。
言归正传,这篇文章主要讲的是用 绘制表格时,如何合并单元格 以及 表格太大时如何处理。
合并单元格
- 引入包:
\usepackage{multirow}
- 通过命令
\multicolumn
和\multirow
进行合并单元格。
-
\multicolumn{参数1}{参数2}{参数3}
-
参数1
表示要将整个单元格分成多少列 -
参数2
表示对齐方式 -
参数3
表示这个单元格的内容
-
-
\multirow{参数1}{参数2}{参数3}
-
参数1
表示要将整个单元格分成多少行 -
参数2
表示对齐方式 -
参数3
表示这个单元格的内容
-
- 示例:
-
\multicolumn{2}{c|}{时间序列模型}
指的是这个单元格占两列。 -
\multirow{2}{*}{名称}
指的是这个单元格占两行(可以用来垂直居中) -
\multicolumn{2}{c|}{\multirow{2}{*}{方法}}
指的是方法
这个内容所处的单元格占两行,同时也占两列。如果\multirow
前面没有\multicolumn
的话,默认就是只占一列。
-
- 代码示例:
代码:
\begin{table}[!htbp]
\caption{demo1}
\label{demo1}
\centering
\begin{tabular}{|c|c|c|c|c|}
\hline
\multirow{2}{*}{多行}&
\multicolumn{2}{c|}{多列}&
\multicolumn{2}{c|}{\multirow{2}{*}{多行多列}} \\
\cline{2-3}
& 多列1 & 多列2 & \multicolumn{2}{c|}{} \\
\hline
label-1 & label-2&label-3 & label-4& label-5\\
\hline
\end{tabular}
\end{table}
解释:
-
\begin{tabular}{|c|c|c|c|c|}
中的c
数量应该与表格中的列的数量一致,比如这里有5列 - 表头中第三列是多行多列的情况,因此如果表头中没有子表头的话,需要用
\multicolumn{2}{c|}{}
进行占位 -
\cline{2-3}
表示在第2列和第3列头顶画出横线,下标从1开始。 - 多了
& 多列1 & 多列2 & \multicolumn{2}{c|}{} \\
是因为前面说了\multirow{2}{*}{多行}
表示有个单元格占了两行,而\multicolumn{2}{c|}{多列}
默认是只占一行的,因此还要用这句代码来对第二行进行填充
效果:
表格内容太长
-
可以使用
\setlength{\tabcolsep}{0.23mm}{\begin{tabular}……\end{tabular}}
调整表格宽度,其中0.23mm
用来控制表格的宽度 -
代码示例
% before
\begin{table}[!htbp]
\caption{demo2-before}
\label{demo2-before}
\centering
\begin{tabular}{|c|c|c|}
\hline
我是一个很长很长很长很长很长很长很长很长的字符串 & 我也是 & 我也是呀 \\
我才不是 & 我也是 & 你到底是是还是不是 \\
\hline
\end{tabular}
\end{table}
% after
\begin{table}[!htbp]
\caption{demo2-after}
\label{demo2-after}
\centering
\setlength{\tabcolsep}{0.23mm}{
\begin{tabular}{|c|c|c|}
\hline
我是一个很长很长很长很长很长很长很长很长的字符串 & 我也是 & 我也是呀 \\
我才不是 & 我也是 & 你到底是是还是不是 \\
\hline
\end{tabular}}
\end{table}
效果:
单元格内容太长换行
对于单元格中,内容太长需要换行的情况,可以有两种解决方法:
- 控制每一列的长度:
\begin{tabular}{|p{3.5cm}|p{2cm}|p{8cm}|}
- 手动换行,即在两行之间不画线,不使用
\hline
进行分割,这样看起来就像是一个单元格。
方法一:控制每一列的长度
通过\begin{tabular}{|p{3.5cm}|p{2cm}|p{8cm}|}
控制每一列的长度,超过该长度的部分会自动换行
代码示例:
% before
\begin{table}[!htbp] \centering
\caption{demo3-method1-before}
\label{demo3-method1-before}
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{协议} & \textbf{网络层次} & \textbf{描述} \\
\hline
IP & 网络层 & IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流量控制。如果出错可以通过ICMP报告,ICMP在IP模块中实现。 \\
\hline
\end{tabular}
\end{table}
% after
\begin{table}[!htbp] \centering
\caption{demo3-method1-after}
\label{demo3-method1-after}
\centering
\begin{tabular}{|p{3.5cm}|p{2cm}|p{8cm}|}
\hline
\textbf{协议} & \textbf{网络层次} & \textbf{描述} \\
\hline
IP & 网络层 & IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流量控制。如果出错可以通过ICMP报告,ICMP在IP模块中实现。 \\
\hline
效果:
方法二:手动换行
在两行之间不添加\hline
等横线代码,手动对内容进行分行,让需要换行的内容写到下一行的代码中。
代码示例:
% before
\begin{table}[!htbp] \centering
\caption{demo3-method1-before}
\label{demo3-method1-before}
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{协议} & \textbf{网络层次} & \textbf{描述} \\
\hline
IP & 网络层 & IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流量控制。如果出错可以通过ICMP报告,ICMP在IP模块中实现。 \\
\hline
\end{tabular}
\end{table}
% 手动换行
\begin{table}[!htbp] \centering
\caption{demo3-method1-after}
\label{demo3-method1-after}
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{协议} & \textbf{网络层次} & \textbf{描述} \\
\hline
IP & 网络层 & IP协议是将多个包交换网络连接起来,\\
& & 它在源地址和目的地址之间传送一种称之为数据包的东西,\\
& & 它还提供对数据大小的重新组装功能,\\
& & 以适应不同网络对包大小的要求。\\
& & IP不提供可靠的传输服务,它不提供端到端的或(路由)结点 \\
& & 到(路由)结点的确认,对数据没有差错控制,\\
& & 它只使用报头的校验码,它不提供重发和流量控制。\\
& & 如果出错可以通过ICMP报告,ICMP在IP模块中实现。 \\
\hline
\end{tabular}
\end{table}
% 垂直居中
\begin{table}[!htbp] \centering
\caption{demo3-method1-after-after}
\label{demo3-method1-after-after}
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{协议} & \textbf{网络层次} & \textbf{描述} \\
\hline
\multirow{8}{*}{IP} & \multirow{8}{*}{网络层} & IP协议是将多个包交换网络连接起来,\\
& & 它在源地址和目的地址之间传送一种称之为数据包的东西,\\
& & 它还提供对数据大小的重新组装功能,\\
& & 以适应不同网络对包大小的要求。\\
& & IP不提供可靠的传输服务,它不提供端到端的或(路由)结点 \\
& & 到(路由)结点的确认,对数据没有差错控制,\\
& & 它只使用报头的校验码,它不提供重发和流量控制。\\
& & 如果出错可以通过ICMP报告,ICMP在IP模块中实现。 \\
\hline
\end{tabular}
\end{table}
解释:
可以看到,虽然第二个示例解决了换行的问题,但是在这一行中的IP
和网络层
这两个内容并没有显示垂直居中,这是因为这两个单元格是在最上面的那一行。因此可以用 \multirow{8}{*}{IP}
表示IP
这个内容占了8行,结果显示出来就会垂直居中,如第三个结果所示。
注意:
-
\multirow{8}{*}{IP}
需要加在当前的要垂直居中的那一项上,而不是表头。并且,第一个参数8
的由来是因为我将过长的内容分成了8
行 - 手动换行的内容,仍然需要在那一行后面加上换行的代码:
\\
效果:
后记
这篇是我记录关于LaTex表格的一些代码,方便以后需要的时候拿来使用。有什么不足、错误之处还请批评指正。っ゚Д゚)っ