最近写论文要用到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.}
但是我们往往会遇见到的情况是,我们需要单元格内换行,而同时,又需要合并行。例如图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}