笔者使用单栏template,之前paper里写的双栏表格迁移过来的时候发生了一些问题,随后使用adjustbox
调整许久之后问题才得以解决,至此深觉adjustbox
乃好家伙也,作笔记记录一下table的常用排版格式。
demo:
先上个demo看看效果:
最基本的类三线表的样式,代码如下:
\begin{table}[!t]
\centering
\tiny
\adjustbox{max width=0.85\linewidth,width=0.8\linewidth,center=\linewidth}{
\begin{tabular}{l|cc|cc}
\Xhline{0.5pt}
\multirow{3}{*}{\textbf{Partition}} & \multicolumn{2}{c|}{\textbf{Rel}} &
\multicolumn{2}{c}{\textbf{up}}\\
& type & instance & type & instance\\
\Xhline{0.3pt}
train & 2 & 2 & 12 & 3\\
dev & 6 & 960 & 7 & 80\\
test & 1 & 100 & 2 & 83\\
\Xhline{0.5pt}
\end{tabular}
}
\caption{The demo}
\label{demo}
\end{table}
接下来一步步分解代码:
tabular
首先是最基础的tabular表格,也就是填数据的那个对象:
\begin{tabular}{l|cc|cc} % 竖排格式,| 表示表格列之间有竖线;l表示居左,c表示居中
\Xhline{0.5pt} % 粗横线,{}中为粗细参数
\multirow{3}{*}{\textbf{Partition}} & \multicolumn{2}{c|}{\textbf{Rel}} &
\multicolumn{2}{c}{\textbf{up}}\\ % 这两行会有点难理解。大致就是分了三子行,并了两列为母列。听起来有点奇怪,之后会解释。
& type & instance & type & instance\\
\Xhline{0.3pt}
train & 2 & 2 & 12 & 3\\ % 这几行容易理解
dev & 6 & 960 & 7 & 80\\
test & 1 & 100 & 2 & 83\\
\Xhline{0.5pt}
\end{tabular}
上面最难理解的就是multirow和multicolumn的部分。首先\begin{tabular}{l|cc|cc}
表格其实是有5列的,这点请先记住!后面会用到。
然后,我们先看一眼表格对应的部分:
直觉上也就看得出来,这行其实是不止一行的,这也就是multirrow的作用。\multirow{3}{*}{\textbf{Partition}}
其实就是把Partition
分给了三个子行(为什么是三个?后面会解释),multirow的参数:
\multirow{子行数}{对齐格式}{显示内容}
随后是立即又用&
(列分隔符)拼接了两个multicolumn,注意 \multicolumn{2}{c|}{\textbf{Rel}}
就是把两列并在了一起,然后放进去了一个Rel
.还记得之前说过,这个表其实是有5列的,所以后面又紧跟了一个\multicolumn{2}{c}{\textbf{up}}
,又并掉两列,放了一个Up
。至此第一个子行结束
,接下来用\\
换到下一个子行。然后注意,这里& type & instance & type & instance
把第一个子列空了出来,所以这就使得上一个子行的Partition
,掉了下来。接下来就是常规的东西了。
如果我当时设置的是\multirow{2}{*}{\textbf{Partition}}
也就是事先只设置2个子行呢?会变成下面:
可以看到,由于"高度不够",Partition
“掉不下来了”,所以就很难看。
有人也会注意到,为什么我会用\multicolumn{2}{c|}{\textbf{Rel}}
,中间的对齐格式用的是c|
?如果用c
会这样:
这主要是因为multicolumn的关系,导致事先设置的{l|cc|cc}
在multicolumn这个封装处无法正常显示。需要主动在对其中指定。
上述过程极具动态性,最好是自己实地操演一下,然后对着表格来理解公式!
table
这个简单,用table环境把tabular封装成一个浮动体。
adjustbox
这个东西好用,先看一下adjustbox的参数:
\adjustbox{自动调节区间}{tabular对象}
它其实就是给原先tabular封装了一层,然后加上灵活的调节范围,latex在编译的时候对这个tabular的排版放缩也会依据你事先设定的区间灵活调整。比如我用的是:
\adjustbox{max width=0.85\linewidth,width=0.8\linewidth,center=\linewidth}{}
[0.8,0.85]单栏行宽区间调节,并居中于单栏。
总结:
还是一句话,理解latex的复杂表格是很比较有难度的,一定要自己实地打,边看表格的结构,边理解代码每一个cmd每一个参数作用是啥。猜不出来的,要么直接查,最好就去掉或者改变这个参数,看看这个表格会变成啥样(这样才能记忆深刻)。总之耐心点,这本来就是一个动态的理解过程。