1、表格的处理 【次页】: 9. 图形的处理 【标题页】: latex123 【前页】: 7. 宏套件 目录 索引 8. 表格的处理 这是属于一般人觉得比较困难,但却是很重要的部份,让我们多花点时间研究。LaTeX 的表格,因为是抽象逻辑的思考方式来制作表格,对一般用户而言,比较不容易转换成直观印象。当然,有些编辑器,例如 GNU Emacs,有方便画 LaTeX 表格的编辑器 script,但这些我们先不去理他,先从 LaTeX 本身表格的结构理解起,这样在使用其他的辅助工具时也会比较得心应手,甚至没有其他工具,只要把握住表格的大结构,制作表格就不会摸不着头绪了。 由于 LaTeX 内建的表格功
2、能算有点阳春,因此这一章会介绍一些外来的宏套件,来弥补 LaTeX 表格功能的不足,这些宏,使用上算相当普遍,几乎所有的 TeX 的各种发行版都会附上,因此不必担心可移植性的问题。 8.1 表格的种类 表格的使用,在文章上常常是必备的要件,他有归纳及醒目的作用,当然,表格太多也是会喧宾夺主。通常,我们中文的使用习惯,表格就是大方框内有小方框,文字置于小方框内,甚至某些小方框内还有斜线在分隔。为了排版上的方便及视觉表现上的美观、清楚,在国际上大部份较正式的论文已不使用纵线、斜线,表格通常由横线来做区隔,甚至完全没有线条,使用空间区隔的方式。这种趋势几乎在二十几年前就已开始普遍,只是国内的文件似乎
3、还是很喜欢有纵、斜线在表格之中,好像没有一些框线层层包住就不像表格。如非特殊的表现上的需求,我们应该朝简化表格本身的方向走,将重点置于表格的内容及表格的逻辑结构安排,漂漂亮亮的表格外观加上不当的内容配置,个人觉得这是个失败的表格制作。 另外,等粗的双线条,可能也是得尽量避免,通常粗细不等的外框双线条有装饰的作用,因此,如果文件是较正式的论文,那就可能要避免,如果是海报、DM 或要让人们填写的表格之类的,那又是另外一回事,这时封闭性的方框可能会有需要。这些规范只不过是一些惯例,并非一成不变的,得视文件的性质及使用场合来做变化,一个大原则是,如果是以文字叙述为主的文件,那么,表格本身如果比文字内容
4、抢眼太多的话,或许就要考虑简化表格本身了。 我们这里就来比较,有纵线、无纵线、完全没有线框及含双线表格的各种形式的表格,大家就自由心证,看哪一种表格看起来比较顺眼。由于 HTML 格式在表格的表现上可能会失真,因此这里制作成 PDF 格式供参考: http:/edt1023.sayya.org/tex/latex123/test-tables.tex http:/edt1023.sayya.org/tex/latex123/test-tables.pdf 8.2 tabbing 环境 这是 LaTeX 里头最基本的表格形式,除非自行另外定义、绘制,他并没有方便可用的线条指令来区隔,完全使用空间
5、、位置的配置来显示表格内容,这时整个 tabbing 表格在 LaTeX 的地位并不是一个最小单位的 box,LaTeX 不会把整个表格当成一个单位来处理。所以,tabbing 表格是可以跨页的,他可以被分成两半来处理。因此,要和其他文字、图表并排排版时,得另外放进一个 box 中,让他自成一个 box 单位,例如 parbox 或 minipage 环境里头。 在 tabbing 环境中,第一个列(row)是以 = 来标示 Tab 宽度来区隔字段(column),这个宽度是由字段里头的字符串宽度所决定的。后续的每个字段是由 这个符号来区隔,每列尾要自行加上 来换行,最后一行可以不必使用 换行
6、。tabbing 的基本大结构是: begintabbingcolumn1 = column2 = column3 item1 item2 item3 itemA itemB itemCendtabbing这里特意把他排列整齐(事实上,不排整齐 LaTeX 也会帮忙排好),这样才能看得出来他的表格结构。那如果想调整字段宽度时可以使用 template 的方式,例如: begintabbingxxxxxxxxxx=xxxxxxxxxx=xxxxxxxxxx killcolumn1 column2 column3 item1 item2 item3 itemA itemB itemCendtabb
7、ing这里以 10 个 x 为字段的宽度,这里的 kill 表示这一行是不印出来的,只是在表示各个字段的样本宽度,而且他会自动换行。当然,要使用其他的字符串也是可以,例如以表格中最长字符串来取代整个 x 字符串,这样就会让字段宽度刚好都可以容纳其他栏内内容。也可以使用 hspace6em 或其他的长度指令,来指定字段的宽度。 对于字段内文字的控制,tabbing 较不完备,虽然 LaTeX 有提供 让这个符号之前的文字靠左,及 让这个符号之后的文字靠右,但实际运用,可能不是使用者想要的结果,因此 LaTeX 的表格,主要还是以 tabular 环境较为常用。但 tabbing 环境的好处是,他
8、不见得一定要用于表格的排版,例如他也可以表现如条列环境般的另一种表现方式,而且他可以跨页排版。 8.3 tabular 环境 这大概是最常使用的表格形式,可以很方便的画线框。这种表格,LaTeX 是把整个表格当成一个单位来处理,就像字母一样,因此他在版面的安排上是和一般的字母一般的处理,所以,这种表格不经特殊处理,无法被分割成两个部份来跨页。 和 tabbing 环境的不同,除了可以有线条之外(tabular 环境,当然也是可以完全没有线条),分隔字段的符号是 &,而且,一定要指定栏内文字的置放位置,栏内文字超出指定的宽度时,会自动折行,还有许多其他更细节的调整。 8.3.1 tabular
9、表格的基本结构 begintabulartlllhlinecolumn1 & column2 & column3 hlineitem1 & item2 & item3 itemA & itemB & itemC hlineendtabular其中 t 表示 top,也可以是 b 表示 bottom,或 c 代表 center,这要在前后有文字相并排的时候才会显现作用,因为 LaTeX 会把整个 tabular 表格当成一个字母单位,所以可以和其他文字、图表并排排版。这些参数的意思是和同行文字的对齐方式,top 是表格顶端和前后文字对齐,bottom 则是表格底部和前后文字对齐,center 则
10、是和表格中央对齐。 换行的方式和 tabbing 环境一样,其中的 hline 是画一条横线的意思,连续两个 hlinehline 会画双横线,他本身会自动换行,因此不必加上换行符号。其中 begintabularlll 的 lll 是在指定各字段内容在小方框内的置放位置,l 表示靠左(left),r 表示靠右(right),c 表示置中(center)。在 lll 中加上 bar(|)会画纵线,例如 |l|l|l| 这样就会变成传统的大方框、小方框的表格。而两个 bar 就会画双纵线。 tabular 环境内尚可使用另一个 tabular 环境来制作更复杂的表格,这在 tabbing 环境是
11、不被允许的。 8.3.2 tabular 环境对字段的调整 1.p宽度 2.这里的 p 指的是段落(paragraph)。通常用于一个小段落的文字,指定了宽度后里头的文字会自动折行,而且这个段落的顶端会和其他字段的顶端对齐。 3.文字、符号或指令 4.这可以作用在本栏的各个列,让他们都出现某个文字、符号或都在某个指令的作用下。这个指令另外会同时将字段间距缩成 0,置于首尾的话,会有让横线和文字切齐的作用(预设不会切齐,横线两端会多出字段间距的部份)。 5.multicolumn字段数左右位置文字内容 6.跨栏排版,例如一小段文字跨两栏。左右位置可使用 lrc 之一。 7.clinea-b 8.
12、画某部份字段的横线,其中的 a-b 指的就是要画线的字段数,例如 cline2-3 就是画第二栏至第三栏的横线。 9.arrayrulewidth=单位长度 10.调整表格线条的粗细,默认值是 0.4pt。使用方法:arrayrulewidth=1.5pt 即可,但要注意的是要在进入 tabular 环境之前设定好。 11.tabcolsep=单位长度 12.调整两字段的左右间距。请注意,这个值是实际两字段间距值的一半,预设是 6pt。使用方法和 arrayrulewidth 一样。 13.doublerulesep=单位长度 14.调整画双线时,这两线间的间距,默认值是 2pt。使用方法和
13、arrayrulewidth 一样。 15.arraystretch 16.调整表格的上下行距。请注意,这要由 renewcommand 来重设,因为在 LaTeX 定义出的一个常数值,而这个 arraystretch 只是这些常数值的倍数,我们要重新改变他才能改变默认倍数。例如:example16.tex 中的使用方法。 在 tabular 环境的参数中,可能是取代原来的参数,例如 p。也可能是置放在原参数的前后,如 ,这看一下实际例子就可以了解: % example16.texdocumentclassarticleusepackagetextcomp % for textcelsiusr
14、enewcommandarraystretch1.2 % 将表格行间距加大为原来的 1.2 倍arrayrulewidth=1pt % 调整线条粗细为 1pttabcolsep=12pt % 调整栏间距为 24ptbegindocumentcenteringsection*SPECIFIC HEATS (20 textcelsius AND 1 ATM)begintabularsf lll % 第一字段使用 sans serif 字族hline & multicolumn2cbf Specific Heats % 跨二三栏排版,文字置中cline2-3 % 只画二三栏横线 & $c$ (J/k
15、g$cdot$K) & $C$ (J/mol$cdot$K) hlineAluminum & 900 & 24.3 Copper & 385 & 24.4 Gold & 130 & 25.6 Steel/Iron & 450 & 25.0 Lead & 130 & 26.8 Mercury & 140 & 28.0 Water & 4190 & 75.4 Ice ($-$10 textcelsius) & 2100 & 38 hlineendtabularenddocumenttextcomp 也是 LaTeX 的标准宏之一,他提供了许多符号,不必进入数学模式也是可以正常使用。但一般编译的话,
16、可能会使用到 pk 点阵字,如果有安装 cm-super Type1 字型的话,可以使用以下的编译方式: latex example16.texdvisp -Pcm-super example16.dvips2pdf example16.ps这样就会完全使用 Type1 字型。如果没有安装 cm-super Type1 字型,则可引用 txfonts 或 pxfonts 宏套件。 如果完全没有加入任何参数,那么他的作用只是在去掉左右两栏间距而已,大家可以把有关 的部份拿掉,试着再编译看看,仔细比较看有什么不同。有些专业排版的专家建议把表格前后加个 去除突出来的横线(实际上就是去除原有左右两边间
17、距的部份)。编译好的例子在: http:/edt1023.sayya.org/tex/latex123/example16.tex http:/edt1023.sayya.org/tex/latex123/example16.pdf 如果 里头不是指令,而是文字或符号,那这个文字或符号会加在各栏文字内容的前或后。 p 指令的使用时机是某一个字段的文字比较多,需限定字段的宽度让他自动折行的情形,例如以下的例子: % example17.texdocumentclassarticlerenewcommandarraystretch1.2 % 将表格行间距加大为原来的 1.2 倍begindocum
18、entcenteringsection*Yi Syllables Area Character Blocksbegintabularllp6cmhlineStart & End & Character Block Name hlineA000 & A48F & Yi Syllables. Yi also known as Lolo, is a script resembling Chinese in overall shaps that is used in the Yunnan province China. A490 & A4CF & Yi Radicals. Basic units of
19、 the Yi syllables. hline endtabularenddocument这样会把 p 指定的字段当成一整个段落来处理,空一个空白行,同样是表示新段落的开始。编译好的例子如下: http:/edt1023.sayya.org/tex/latex123/example17.tex http:/edt1023.sayya.org/tex/latex123/example17.pdf 8.4 array 宏套件 这个宏套件可以加强原有 tabular 环境的功能。使用上只要引入 array 宏套件即可,tabular 环境依原来的使用方法,只是多了些相关调整指令。 1.m宽度 2.
20、这和 p 一样的作用,只是置放的位置不一样,此时其他字段的内容会对齐这个段落的中央位置。 3.b宽度 4.同 p,但其他字段的内容会对齐整个段落的底部。 5.指令 6.这可以置于 l,r,c,p,m,b 参数之前,是对于某个字段的内容下指令,这个指令会在此一字段内容之前作用。引用了 array package 后,可能会抑制某些 指令 的作用,此时要改用 指令,但这没有去除字段间距的功能,可在前头再加个 即可。 7.指令 相同,但会在此一字段内容之后才作用。 9.!指令 10.这是取代 | 的作用,可以方便使用特殊符号来代替原来的纵线。 11.extrarowheight 12.这是在调整字段
21、内容顶端的空间大小,但不会改变底部的空间大小。 8.5 tabularx 宏套件 tabularx 宏套件提供一个 tabularx 环境,这是加强型的 tabular 环境,附在 LaTeX 的工具组里头。主要作用是改善 tabular* 指令,指定表格宽度的功能。 在原始 tabular 环境,加了个星号,可以指定表格的宽度。但由于 tabular* 这个原始环境,他会去修改栏内空间,而不是实际整个表格方框的宽度,这使得某些文字会超出表格范围,因此,使用上可能 tabularx 会比较方便,他提供了 X 参数来取代原来的 lrc 参数,这个参数实际的作用是 p 的功能,因此会实际调整字段方
22、框的宽度,而且里头的文字叙述超过字段宽度时会自动折行。这个套件会自动引入 array package8.1。这里使用这两种环境来排版,大家比较一下他的结果,就知道差异了: % example18.texdocumentclassarticleusepackagetabularxparindent=0ptrenewcommandarraystretch1.2begindocumentcenteringsection*texttttabular* environmentbegintabular*8cmlllhlineStart & End & Character Block Name hline3
23、400 & 4DB5 & CJK Unified Ideographs Extension A 4E00 & 9FFF & CJK Unified Ideographs hlineendtabular*section*textsftabularx packagebegintabularx8cmllX % 8cm 减去前两个字段宽度后,剩下的通通给hline % 第三字段使用,文字超出的部份会自动折行Start & End & Character Block Name hline3400 & 4DB5 & CJK Unified Ideographs Extension A 4E00 & 9FF
24、F & CJK Unified Ideographs hlineendtabularxenddocumenttabularx package 并不是都没有缺点的,例如,使用 verb 指令时会有一些不兼容,另外,在 tabularx 环境内还要有其他的 tabularx 环境时,这个在里头的 tabularx 环境要由大括号括住,不能像 tabular 环境一下的直接巢状使用。编译好的例子在: http:/edt1023.sayya.org/tex/latex123/example18.tex http:/edt1023.sayya.org/tex/latex123/example18.pdf
25、 8.6 表格线条粗细的控制(booktabs) 由前面几节所述,可以看得出来 LaTeX 表格宏的功能稍嫌阳春了点,对于一些特殊状况可能会无法处理,对于表格外观要求较高的使用者也会感到不足,虽然也可以自行去定义宏,但这样一来不但可能有可移植性的问题,而且也不是每个人都有时间去学习 TeX/LaTeX 宏的写作。我们试图来看看有没有其他的解决方式,这里不得不会提到一些外来的宏套件,但这些套件的使用相当的普遍,几乎可以忽略他的可移植性的问题。 我们前面曾学过 arraryrulewidth 指令,可以调整线条的粗细,但是这无法各别调整线条,每个在 tabular 表格环境内的线条会调整成一样的粗
26、细。booktabs 宏套件可以很方便的达成这个目的。我们来看看这个提供了什么方便的指令: 指令功能toprule线条粗细画表格顶端的横线midrule线条粗细画表格里头的横线bottomrule线条粗细画表格底部的横线cmidrule指令某个字段画横线,取代原来的 cline使用方法和 tabular 环境差不多,连环境名称都一样,但可在指令后加个方括号来指定线条的粗细,不指定的话,toprule 及 bottomrule 都会比中间的其他线条粗一点。其中 cmidrule 另有更进一步的功能: cmidrule线条粗细(左右是否去边)画线字段其中画线字段和 cline 一样,指定字段数即可
27、,例如 2-3。左右去边要表明左(l)或/及右(r),也可由大括号指定要去掉多少(预设 0.5em),如:(lr0.7em)2-3。我们把 example16 拿来改一下,大家试着看看有什么不同,编译好的例子如下: http:/edt1023.sayya.org/tex/latex123/example19.tex http:/edt1023.sayya.org/tex/latex123/example19.pdf 由于屏幕分辨率的关系,如果分不出不同,请由打印机印出来比较,或将档案放大再来观察。这里最粗的是 toprule 及 bottomrule 再来是 midrule,最细的是 cmid
28、rule。而且 booktabs 已经调整过原来 tabular 表格的上下间距,除非想得更大,不然的话,不需另外再去设定 arraystretch 的值了。 8.7 彩色表格(colortbl) 彩色表格已经是很普遍,但千万要小心喧宾夺主的情况,也别弄成了大花脸。因此,淡色系可能会比较合适。我们在第 3.4.3.1 小节及 example13 曾提到过 color package 的引用,但并没有详细说明这个套件的用法,而 colortbl 会使用到这些颜色的功能,因此这里稍微说明一下。 8.7.1 color 宏套件 这是附在 LaTeX 工具组 graphics package 中的一个
29、宏,使用上非常简单,只要把 color 宏在文稿 preamble 区引上就可以使用颜色了。以下是常要用到的控制指令: 指令作用color颜色这会使用文章所有内容都使用这个颜色definecolor定义颜色textcolor颜色文字内容让文字内容使用某特定颜色pagecolor颜色这是在设定背景颜色,本页及其后的页面会使用这个背景颜色normalcolor颜色回复原来的颜色colorbox颜色文字内容这是方框背景的颜色fcolorbox框色框内背景色文字内容这是方框颜色和其内背景颜色不同这里要注意的是,指令里头使用的颜色,必需是有定义过的颜色才能使用。color 宏只定义了一些基本颜色,red
30、, green, blue (RGB 模型原色), cyan, magenta, yellow, black (CMYK 模型原色), white,另外一个常用的 gray 灰阶模型(gray-scale),其他的颜色得自行定义。定义颜色的语法如下: definecolor颜色名称颜色模型调色盘值第一个参数就是自定义的一个颜色名称,颜色模型可使用 rgb、cmyk 或 gray,各颜色深浅值在 0-1 之间,调色盘值就是各种原色的值。RGB 颜色的索引值,如果是 Unix-like 系统,可找一下 rgb.txt 这个档案,里头就会有各种颜色的索引值,或者,参考 example24.pdf。这里以 bisque 这个颜色为例子,他的 rgb 三原色的深浅比例为 255, 228, 196,各除以 256 得 0.996, 0.891, 0.755,定义方法如下:8.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1