【Latex 表格】换行+行高

        最近写论文要用到Latex,新手的Latex之旅大概是从Google开始的。


        一般会议都会给出一个Latex模板,所以整体的排版这些不用太操心。遇到的主要问题都集中在表格的设计上。虽然绝大部分科技论文都会用三线表格,展现方式也很明了,但是实际情况总是纷繁复杂的。


        例如,第一列往往是header column,划分出很多种情况,比如对实验方法的上层分类,第二列为具体的实验方法,以后为各自的实验结果。每一行对应一个实验方法。有时,受限于篇幅宽度,往往需要将实验方法名称或上层分类的名称折叠,如图:


        我们需要将第一列折叠,以适应文档宽度。


        以下为几种折叠方法:

  • 使用tabularx 而不是tabular(Latex排版
    \begin{tabularx}{X}
    \hline
    A very very long context to display.\\
    \hline
    \end{tabularx}

  • 自定义\tabincell命令。在tabincell里可以使用\\换行。从tabincell的定义可以看出,实际上它是在当前单元格里嵌套了一个tabular。

    \newcommand{\tabincell}[2]{\begin{tabular}
    {@{}#1@{}}#2\end{tabular}}
    ....
    \begin{tabular}{m{1cm}}
    \hline
    \tabincell{l}{A very \\very long \\contex to display.}\\
    \hline
    \end{tabular}

  • 使用\multirow换行。\multirow中用width参数限制列宽,超出部分会直接换行
    \multirow{row_number}{width}{A very very long  context to display.}

        以上方法百度或者Google都能轻易查到。这个方法可以完全适用于图1。因为 被折叠的内容的高度并没有超过它本身的行高。当折叠之后的文本比原本的行高更高时,前两种方法是可以实现自动调整行高的,因为其内容并没有跨行。

        

        但是我们往往会遇见到的情况是,我们需要单元格内换行,而同时,又需要合并行。例如图2中的第二类结果:


        

        当我们合并了上下两行后,以上三种方法都没办法自动调整行高,使其自适应于文本的高度。


        此时问题转换成,如何调整some longer category name的行高了。同时,只调整下半部分的行高,而不影响上半部分的行高。


        搜了很多调整行高的方法:

  • 用盒子来进行基线调整(whatever这种方法对于本来就不熟悉latex的人来说完全是噩梦,根本看不懂)
  • 某博客上看到的
    A very very long context to display\\[3pt](行高)


    对这个用法不了解,尝试了一下,感觉它是调整行距而不是行高的?因为它会将最后一列的下行距拉开,此时会造成排版不一的问题
  • 使用\renewcommand{\arraystretch}{倍数}命令,但是该命令只对整个列表适用,而不能单独改变某几行的行高

        

        综合来看,勉强能用的应该是第三种方法,于是尝试对图2下半部分重新建一个表,通过嵌套的方式加入原标当中,效果如图:


        发现下半部分整体往右移动了。因为对于嵌套表格来说,被嵌套的表格的左边框是其边界,应与上文的内容对齐。即:


        

        而表格即使是左对齐,也会留有一定的空白,使得被嵌套表格较上文往右移动了。


        所以最终,我直接将两个表格并列了。(手动围笑


        

        然后连个tabular放在一个table环境里。其实两个tubular之间是有一点点距离的,但是勉强算解决了吧 ;-),代码见下:

\documentclass{article}
\usepackage{multirow}
\usepackage{multicol}
\usepackage{array}
\usepackage{booktabs}
\newcommand{\tabincell}[2]{\begin{tabular}
{@{}#1@{}}#2\end{tabular}}
\begin{document}
	\begin{table}
		\begin{tabular}{m{1.1cm}m{3cm}m{0.7cm}m{0.7cm}m{0.7cm}m{0.7cm}m{0.7cm}}
			\noalign{\smallskip}\hline\noalign{\smallskip}
			\multicolumn{2}{c}{\multirow{3}*{\textbf{Method}}}&\multicolumn{5}{c}{Test result}\\\cmidrule(l){3-7}
			&&\multicolumn{4}{c}{sub}&sub\\\cmidrule(l){3-6}\cmidrule(l){7-7}
			&&A&B&C&D&All\\		
			\noalign{\smallskip}\hline\noalign{\smallskip}
			\multirow{5}*{\tabincell{l}{Super\\category\\name}}
			&Method name&result&result&result&result&result\\
			&Method name&result&result&result&result&result\\
			&Method name&result&result&result&result&result\\
			&Method name&result&result&result&result&result\\
			&Method name&result&result&result&result&result\\
			\noalign{\smallskip}\hline\noalign{\smallskip}
		\end{tabular}
		\renewcommand{\arraystretch}{2}
		\begin{tabular}{m{1.1cm}m{3cm}m{0.7cm}m{0.7cm}m{0.7cm}m{0.7cm}m{0.7cm}}
			\multirow{2}{1.1cm}{Some\\ longer \\ category \\ name}
			&Method name&result&result&result&result&result\\
			&Method name&result&result&result&result&result\\
			\noalign{\smallskip}\hline\noalign{\smallskip}
		\end{tabular}
	\end{table}
\end{document} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值