救救你的REPORT(10)— 表格绘制

从访问数据和打赏上看,能跟着我继续走下去的人我估计会越来越少了。不知道是大家已经掌握了LaTeX还是放弃了LaTeX。如果你真的放弃了,我觉得你可能这辈子都不会再学得会LaTeX了,你会越来越忙,越来越没时间学一个好的工具,然后因为没有好的工具,会越来越忙,进入死循环。相信我,可能没有什么比你在大二的时候能学会用LaTeX更重要的了,从现在到你硕士毕业少说有50到80篇的各种文章要写,用LaTeX给你的益处可能真的是无穷的。

从安装LaTeX和Sublime、基本写作框架、图片到公式,我相信一路能一起走过来的同学已经对LaTeX有所了解了,并且已经有人表示再也不想用Word了,这让人很欣慰。我也顺便简要的讲了Matlab的用法,基本上只要想学会的同学,经过练习一定可以学会。不过我要再次声明一下,如果是第一次看到这篇文章的同学,请从第一讲开始看,否则很多内容会非常迷茫。

今天我们主要来说一说表格。表格是学术写作非常常用的表达形式之一,通常用来总结归纳结果或者展示可归类数据,也有一些时候用于将一些同类的内容进行归类展示。当然,用LaTeX是必然可以做出高质量的表格的。

虽然我非常不喜欢Word,但是不可否认的一点是,我非常喜欢Word的表格功能,因为非常直观,尤其是Word相对早期的版本,大概是Office 98(比很多同学年龄都大)的版本,表格线的位置非常好控制,后期的版本知道现在的Word最新版,表格线的控制都是有些难度的。而LaTeX在表格绘制上虽然非常专业,但是很麻烦,尤其是遇到极为复杂的表格的时候,其语句的可读性比较差。

并且由于LaTeX是开源的,不断的有人编写新的Package来处理表格,所以也出现了不同的方法,我们在本文中先来讲述基本的表格使用方法,也就是并不需要新增更多的Package。我会将最传统的方法、一些好用的工具、以及一个非常“缺德”但可能也好用的损招。

LaTeX中正常的表格绘制基本方法

\begin{table}[h]
\label{tab:tab1}
\centering
\caption{ Title Of Table }
\begin{tabular}{ |p{2cm}|p{2cm}|p{3cm}| } % #1
\hline % 绘制横向表格线,在LaTeX中需要自己定义每一行的表格线
cell 11 & cell 12 & cell 13  \\
\hline
cell 21 & cell 22 & cell 23  \\
cell 31 & cell 32 & cell 33  \\
\hline
\end{tabular}
\end{table}

这个表格的绘制结果如下:

语法总是有点枯燥的,但我们还是要解释一下细节。首先,在这里我们使用了两种环境,最外层的是 table 环境,table 环境的作用是对表格添加标题和编号。在 table 环境下,我们定义了 \centering 是表格居中,对应的,如果想让整个表格居左,就用\flushleft,
局右显示就是 \flushright。并且定义了表格的标题,在 \caption 里进行定义。

在 table 环境下,我们需要再使用 tabular 环境来定义表格主体。在上面的代码中的#1位置,第二个大括号里就是定义表格每一列的情况。LaTeX允许定义多种单元格列的形式,通过如下表格列的格式标识符来实现:

p{宽度}: 指定宽度的单元格,支持多行文字自动换行,顶端对齐

m{宽度}: 指定宽度的单元格,支持多行文字自动换行,单元格垂直居中对齐

b{宽度}: 指定宽度的单元格,支持多行文字自动换行,底端对齐

l: 根据内容调整单元格宽度,不支持多行文字自动换行,左对齐

c: 根据内容调整单元格宽度,不支持多行文字自动换行,居中对齐

r: 根据内容调整单元格宽度,不支持多行文字自动换行,右对齐

上面所有的宽度单位建议使用公制的厘米,也就是cm,除非你真的熟悉英制单位。事实上由于我小时候竟然画电路板,所以对英制很了解,但依然不喜欢在日常中用英制。

在各个列之间,如果想需要绘制竖线,则使用 | 将上面的标识符隔开,如果需要双竖线,就使用 || 将标识符隔开。

这里会有一个小问题,如何既然设置了单元格宽度,又让内容居中呢?使用 p{宽度}<{\centering},就可以实现这个功能了。偶尔还是挺有用的。

另外,我们有时候会面临让一列都加粗,这时候可以通过在标识符的左边添加 >{\bfseries}p{3cm} 来实现加粗,而将 bfseries 替换为 itshape 后,则是斜体。粗体的英文是 bold,斜体的英文是 italic,italic 这个词是Italy的派生词,很好记,意大利有比萨斜塔,所以意大利体就是斜体字(一个猜想)。下一讲咱们来说道说道字体,我最近正在罗马,正好咱们用到的最常用的字体就是Times New Roman,而且斜体字又是以意大利这个神奇的国度命名的。我会在罗马写完字体这一讲。

我们再回到上面的例子中,还有几个特殊符号和命令我们没有解释。首先是 \hline,这个就是水平线,LaTeX制表需要指定每一行的水平线;然后是 & 符号,这个是在一行中,区分每一列的;最后是 \\ 符号,在表格中是重新起一行表格,注意别和C++的单行注释弄混了,方向是不一样的.由于在正常的段落中,\\就是换行符,但是在表格中换的是整个表格的一行,而不是单元格里段落的一行了,所以在单元格中,则使用\newline来进行换行。

有时候,我们并不想让所有的水平线覆盖所有的列,这时候可以使用 \cline{i-j}来替换 \hline,i和j分别是起始列和结束列。

初次使用表格,大家总会觉得LaTeX表格的行距特别紧,看起来不是很舒服。
在表格环境之外,定义这句:\renewcommand{\arraystretch}{1.5}
,其中的1.5就是1.5倍行距,根据相应的情况改变就可以了。如果不直接指定列宽,那么LaTeX表格会根据内容进行调整宽度,并在最后留出空隙;在指定列宽的情况下,也会在文章和表格线直接留出空隙。这个空隙也是可以调整的,通过语句:\setlength{\tabcolsep}{6pt}来调整,默认就是6pt,也可以使用cm作为单位。这两条语句都是放在 table 环境里,tabular环境外。

下面给出一个简单的例子,用上上面所有讲过的语法:

\begin{table}[h]
\label{tab:tab1}
\centering
\caption{ Title Of Table }
\renewcommand{\arraystretch}{2}
\setlength{\tabcolsep}{10pt}
\begin{tabular}{ |>{\itshape}c|p{2cm}| >{\bfseries}m{3cm}<{\centering}| }
\hline % 绘制横向表格线,在LaTeX中需要自己定义每一行的表格线
cell 11 & cell 12 & cell 13   \\
\hline
cell 21 & cell 22 & cell 23 \\
\cline{1-2}
cell 31 & cell 32 \newline 456& cell 33  \\
\hline
\end{tabular}
\end{table}

效果是这样的:

通过上面讲述的表格绘制的基本方法,已经可以绘制出相当专业的表格了。不过还要大量的细节功能还没有讲。后面慢慢讲。接下来我要说一些“损招”。

LaTeX表格损招

我前面已经表扬过Office系列在表格处理上确实很好用,并且在图片插入等章节已经讲过如何在Office PowerPoint里作图并且插入到LaTeX中。同样的道理,也可以在PowerPoint利用其可视性和便利性迅速绘制表格,并导出矢量图。这里唯一的问题就是如何让Figure的标识编程Table。于是乎,我想出来了如下损招:

\begin{table}[h]
\label{tab:tab2}
\centering
\caption{ Title Of Table }
\includegraphics[width=10cm]{fig/table.pdf}
\end{table}

原理很简单,就是把figure环境变成table环境就行了。然后在稍微调整一下图片宽度,让字体大小和正文匹配。这样你就可以做出任何复杂的表格了。是不是很绝的一个手段!

效果如下:

真的是爱怎么折腾就可以怎么折腾啊!哈哈哈!我在这里测试的时候并没有把字体改成一样的,请大家注意这一点,改成一样的字体,否则容易被看出来。

今天就写到这里,明天给大家更新在罗马写的字体专题。


罗马消费很高啊,写东西不容易,请大家多多支持,扫码支持或者通过支付宝13584435676。比特币钱包是1NBzPagXqFHrwzxT4haGnX7S9FuwTkvX39.


作者:程飞。未经作者允许请勿转载其他网站,可以转载朋友圈。3,417 次浏览

3 评论

发表评论