latex复杂表格排版

笔者使用单栏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每一个参数作用是啥。猜不出来的,要么直接查,最好就去掉或者改变这个参数,看看这个表格会变成啥样(这样才能记忆深刻)。总之耐心点,这本来就是一个动态的理解过程。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值