表格的处理.docx
《表格的处理.docx》由会员分享,可在线阅读,更多相关《表格的处理.docx(20页珍藏版)》请在冰豆网上搜索。
表格的处理
【次页】:
9.图形的处理【标题页】:
latex123【前页】:
7.宏套件 目录 索引
8.表格的处理
这是属于一般人觉得比较困难,但却是很重要的部份,让我们多花点时间研究。
LaTeX的表格,因为是抽象逻辑的思考方式来制作表格,对一般用户而言,比较不容易转换成直观印象。
当然,有些编辑器,例如GNUEmacs,有方便画LaTeX表格的编辑器script,但这些我们先不去理他,先从LaTeX本身表格的结构理解起,这样在使用其他的辅助工具时也会比较得心应手,甚至没有其他工具,只要把握住表格的大结构,制作表格就不会摸不着头绪了。
由于LaTeX内建的表格功能算有点阳春,因此这一章会介绍一些外来的宏套件,来弥补LaTeX表格功能的不足,这些宏,使用上算相当普遍,几乎所有的TeX的各种发行版都会附上,因此不必担心可移植性的问题。
8.1表格的种类
表格的使用,在文章上常常是必备的要件,他有归纳及醒目的作用,当然,表格太多也是会喧宾夺主。
通常,我们中文的使用习惯,表格就是大方框内有小方框,文字置于小方框内,甚至某些小方框内还有斜线在分隔。
为了排版上的方便及视觉表现上的美观、清楚,在国际上大部份较正式的论文已不使用纵线、斜线,表格通常由横线来做区隔,甚至完全没有线条,使用空间区隔的方式。
这种趋势几乎在二十几年前就已开始普遍,只是国内的文件似乎还是很喜欢有纵、斜线在表格之中,好像没有一些框线层层包住就不像表格。
如非特殊的表现上的需求,我们应该朝简化表格本身的方向走,将重点置于表格的内容及表格的逻辑结构安排,漂漂亮亮的表格外观加上不当的内容配置,个人觉得这是个失败的表格制作。
另外,等粗的双线条,可能也是得尽量避免,通常粗细不等的外框双线条有装饰的作用,因此,如果文件是较正式的论文,那就可能要避免,如果是海报、DM或要让人们填写的表格之类的,那又是另外一回事,这时封闭性的方框可能会有需要。
这些规范只不过是一些惯例,并非一成不变的,得视文件的性质及使用场合来做变化,一个大原则是,如果是以文字叙述为主的文件,那么,表格本身如果比文字内容抢眼太多的话,或许就要考虑简化表格本身了。
我们这里就来比较,有纵线、无纵线、完全没有线框及含双线表格的各种形式的表格,大家就自由心证,看哪一种表格看起来比较顺眼。
由于HTML格式在表格的表现上可能会失真,因此这里制作成PDF格式供参考:
http:
//edt1023.sayya.org/tex/latex123/test-tables.tex
http:
//edt1023.sayya.org/tex/latex123/test-tables.pdf
8.2tabbing环境
这是LaTeX里头最基本的表格形式,除非自行另外定义、绘制,他并没有方便可用的线条指令来区隔,完全使用空间、位置的配置来显示表格内容,这时整个tabbing表格在LaTeX的地位并不是一个最小单位的box,LaTeX不会把整个表格当成一个单位来处理。
所以,tabbing表格是可以跨页的,他可以被分成两半来处理。
因此,要和其他文字、图表并排排版时,得另外放进一个box中,让他自成一个box单位,例如\parbox或minipage环境里头。
在tabbing环境中,第一个列(row)是以\=来标示Tab宽度来区隔字段(column),这个宽度是由字段里头的字符串宽度所决定的。
后续的每个字段是由\>这个符号来区隔,每列尾要自行加上\\来换行,最后一行可以不必使用\\换行。
tabbing的基本大结构是:
\begin{tabbing}
column1\=column2\=column3\\
item1\>item2\>item3\\
itemA\>itemB\>itemC
\end{tabbing}
这里特意把他排列整齐(事实上,不排整齐LaTeX也会帮忙排好),这样才能看得出来他的表格结构。
那如果想调整字段宽度时可以使用template的方式,例如:
\begin{tabbing}
xxxxxxxxxx\=xxxxxxxxxx\=xxxxxxxxxx\kill
column1\>column2\>column3\\
item1\>item2\>item3\\
itemA\>itemB\>itemC
\end{tabbing}
这里以10个x为字段的宽度,这里的\kill表示这一行是不印出来的,只是在表示各个字段的样本宽度,而且他会自动换行。
当然,要使用其他的字符串也是可以,例如以表格中最长字符串来取代整个x字符串,这样就会让字段宽度刚好都可以容纳其他栏内内容。
也可以使用\hspace{6em}或其他的长度指令,来指定字段的宽度。
对于字段内文字的控制,tabbing较不完备,虽然LaTeX有提供\'让这个符号之前的文字靠左,及\`让这个符号之后的文字靠右,但实际运用,可能不是使用者想要的结果,因此LaTeX的表格,主要还是以tabular环境较为常用。
但tabbing环境的好处是,他不见得一定要用于表格的排版,例如他也可以表现如条列环境般的另一种表现方式,而且他可以跨页排版。
8.3tabular环境
这大概是最常使用的表格形式,可以很方便的画线框。
这种表格,LaTeX是把整个表格当成一个单位来处理,就像字母一样,因此他在版面的安排上是和一般的字母一般的处理,所以,这种表格不经特殊处理,无法被分割成两个部份来跨页。
和tabbing环境的不同,除了可以有线条之外(tabular环境,当然也是可以完全没有线条),分隔字段的符号是&,而且,一定要指定栏内文字的置放位置,栏内文字超出指定的宽度时,会自动折行,还有许多其他更细节的调整。
8.3.1tabular表格的基本结构
\begin{tabular}[t]{lll}
\hline
column1&column2&column3\\
\hline
item1&item2&item3\\
itemA&itemB&itemC\\
\hline
\end{tabular}
其中[t]表示top,也可以是b表示bottom,或c代表center,这要在前后有文字相并排的时候才会显现作用,因为LaTeX会把整个tabular表格当成一个字母单位,所以可以和其他文字、图表并排排版。
这些参数的意思是和同行文字的对齐方式,top是表格顶端和前后文字对齐,bottom则是表格底部和前后文字对齐,center则是和表格中央对齐。
换行的方式和tabbing环境一样,其中的\hline是画一条横线的意思,连续两个\hline\hline会画双横线,他本身会自动换行,因此不必加上换行符号。
其中\begin{tabular}{lll}的lll是在指定各字段内容在小方框内的置放位置,l表示靠左(left),r表示靠右(right),c表示置中(center)。
在{lll}中加上bar(|)会画纵线,例如{|l|l|l|}这样就会变成传统的大方框、小方框的表格。
而两个bar就会画双纵线。
tabular环境内尚可使用另一个tabular环境来制作更复杂的表格,这在tabbing环境是不被允许的。
8.3.2tabular环境对字段的调整
1.p{宽度}
2.这里的p指的是段落(paragraph)。
通常用于一个小段落的文字,指定了宽度后里头的文字会自动折行,而且这个段落的顶端会和其他字段的顶端对齐。
3.@{文字、符号或指令}
4.这可以作用在本栏的各个列,让他们都出现某个文字、符号或都在某个指令的作用下。
这个指令另外会同时将字段间距缩成0,置于首尾的话,会有让横线和文字切齐的作用(预设不会切齐,横线两端会多出字段间距的部份)。
5.\multicolumn{字段数}{左右位置}{文字内容}
6.跨栏排版,例如一小段文字跨两栏。
左右位置可使用lrc之一。
7.\cline{a-b}
8.画某部份字段的横线,其中的a-b指的就是要画线的字段数,例如\cline{2-3}就是画第二栏至第三栏的横线。
9.\arrayrulewidth=单位长度
10.调整表格线条的粗细,默认值是0.4pt。
使用方法:
\arrayrulewidth=1.5pt即可,但要注意的是要在进入tabular环境之前设定好。
11.\tabcolsep=单位长度
12.调整两字段的左右间距。
请注意,这个值是实际两字段间距值的一半,预设是6pt。
使用方法和\arrayrulewidth一样。
13.\doublerulesep=单位长度
14.调整画双线时,这两线间的间距,默认值是2pt。
使用方法和\arrayrulewidth一样。
15.\arraystretch
16.调整表格的上下行距。
请注意,这要由\renewcommand来重设,因为在LaTeX定义出的一个常数值,而这个\arraystretch只是这些常数值的倍数,我们要重新改变他才能改变默认倍数。
例如:
example16.tex中的使用方法。
在tabular环境的参数中,可能是取代原来的参数,例如p{}。
也可能是置放在原参数的前后,如@{},这看一下实际例子就可以了解:
%example16.tex
\documentclass{article}
\usepackage{textcomp}%for\textcelsius
\renewcommand{\arraystretch}{1.2}%将表格行间距加大为原来的1.2倍
\arrayrulewidth=1pt%调整线条粗细为1pt
\tabcolsep=12pt%调整栏间距为24pt
\begin{document}
\centering
\section*{SPECIFICHEATS(20\textcelsius\AND1ATM)}
\begin{tabular}{@{\sf}lll@{}}%第一字段使用sansserif字族
\hline
&\multicolumn{2}{c}{\bfSpecificHeats}\\%跨二三栏排版,文字置中
\cline{2-3}%只画二三栏横线
&$c$(J/kg$\cdot$K)&$C$(J/mol$\cdot$K)\\
\hline
Aluminum&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\\
\hline
\end{tabular}
\end{document}
textcomp也是LaTeX的标准宏之一,他提供了许多符号,不必进入数学模式也是可以正常使用。
但一般编译的话,可能会使用到pk点阵字,如果有安装cm-superType1字型的话,可以使用以下的编译方式:
latexexample16.tex
dvisp-Pcm-superexample16.dvi
ps2pdfexample16.ps
这样就会完全使用Type1字型。
如果没有安装cm-superType1字型,则可引用txfonts或pxfonts宏套件。
@{}如果完全没有加入任何参数,那么他的作用只是在去掉左右两栏间距而已,大家可以把有关@{}的部份拿掉,试着再编译看看,仔细比较看有什么不同。
有些专业排版的专家建议把表格前后加个@{}去除突出来的横线(实际上就是去除原有左右两边间距的部份)。
编译好的例子在:
http:
//edt1023.sayya.org/tex/latex123/example16.tex
http:
//edt1023.sayya.org/tex/latex123/example16.pdf
如果@{}里头不是指令,而是文字或符号,那这个文字或符号会加在各栏文字内容的前或后。
p{}指令的使用时机是某一个字段的文字比较多,需限定字段的宽度让他自动折行的情形,例如以下的例子:
%example17.tex
\documentclass{article}
\renewcommand{\arraystretch}{1.2}%将表格行间距加大为原来的1.2倍
\begin{document}
\centering
\section*{YiSyllablesAreaCharacterBlocks}
\begin{tabular}{@{}llp{6cm}@{}}
\hline
Start&End&CharacterBlockName\\
\hline
A000&A48F&YiSyllables.
YialsoknownasLolo,isascriptresemblingChinese
inoverallshapsthatisusedintheYunnanprovince
China.\\
A490&A4CF&YiRadicals.
BasicunitsoftheYisyllables.\\
\hline
\end{tabular}
\end{document}
这样会把p{}指定的字段当成一整个段落来处理,空一个空白行,同样是表示新段落的开始。
编译好的例子如下:
http:
//edt1023.sayya.org/tex/latex123/example17.tex
http:
//edt1023.sayya.org/tex/latex123/example17.pdf
8.4array宏套件
这个宏套件可以加强原有tabular环境的功能。
使用上只要引入array宏套件即可,tabular环境依原来的使用方法,只是多了些相关调整指令。
1.m{宽度}
2.这和p{}一样的作用,只是置放的位置不一样,此时其他字段的内容会对齐这个段落的中央位置。
3.b{宽度}
4.同p{},但其他字段的内容会对齐整个段落的底部。
5.>{指令}
6.这可以置于l,r,c,p,m,b参数之前,是对于某个字段的内容下指令,这个指令会在此一字段内容之前作用。
引用了arraypackage后,可能会抑制某些@{指令}的作用,此时要改用>{指令},但这没有去除字段间距的功能,可在前头再加个@{}即可。
7.<{指令}
8.和>{指令}相同,但会在此一字段内容之后才作用。
9.!
{指令}
10.这是取代|的作用,可以方便使用特殊符号来代替原来的纵线。
11.\extrarowheight
12.这是在调整字段内容顶端的空间大小,但不会改变底部的空间大小。
8.5tabularx宏套件
tabularx宏套件提供一个tabularx环境,这是加强型的tabular环境,附在LaTeX的工具组里头。
主要作用是改善\tabular*指令,指定表格宽度的功能。
在原始tabular环境,加了个星号,可以指定表格的宽度。
但由于\tabular*这个原始环境,他会去修改栏内空间,而不是实际整个表格方框的宽度,这使得某些文字会超出表格范围,因此,使用上可能tabularx会比较方便,他提供了X参数来取代原来的lrc参数,这个参数实际的作用是p{}的功能,因此会实际调整字段方框的宽度,而且里头的文字叙述超过字段宽度时会自动折行。
这个套件会自动引入arraypackage8.1。
这里使用这两种环境来排版,大家比较一下他的结果,就知道差异了:
%example18.tex
\documentclass{article}
\usepackage{tabularx}
\parindent=0pt
\renewcommand{\arraystretch}{1.2}
\begin{document}
\centering
\section*{\texttt{tabular*}environment}
\begin{tabular*}{8cm}{lll}
\hline
Start&End&CharacterBlockName\\
\hline
3400&4DB5&CJKUnifiedIdeographsExtensionA\\
4E00&9FFF&CJKUnifiedIdeographs\\
\hline
\end{tabular*}
\section*{\textsf{tabularx}package}
\begin{tabularx}{8cm}{llX}%8cm减去前两个字段宽度后,剩下的通通给
\hline%第三字段使用,文字超出的部份会自动折行
Start&End&CharacterBlockName\\
\hline
3400&4DB5&CJKUnifiedIdeographsExtensionA\\
4E00&9FFF&CJKUnifiedIdeographs\\
\hline
\end{tabularx}
\end{document}
tabularxpackage并不是都没有缺点的,例如,使用\verb指令时会有一些不兼容,另外,在tabularx环境内还要有其他的tabularx环境时,这个在里头的tabularx环境要由大括号括住,不能像tabular环境一下的直接巢状使用。
编译好的例子在:
http:
//edt1023.sayya.org/tex/latex123/example18.tex
http:
//edt1023.sayya.org/tex/latex123/example18.pdf
8.6表格线条粗细的控制(booktabs)
由前面几节所述,可以看得出来LaTeX表格宏的功能稍嫌阳春了点,对于一些特殊状况可能会无法处理,对于表格外观要求较高的使用者也会感到不足,虽然也可以自行去定义宏,但这样一来不但可能有可移植性的问题,而且也不是每个人都有时间去学习TeX/LaTeX宏的写作。
我们试图来看看有没有其他的解决方式,这里不得不会提到一些外来的宏套件,但这些套件的使用相当的普遍,几乎可以忽略他的可移植性的问题。
我们前面曾学过\arraryrulewidth指令,可以调整线条的粗细,但是这无法各别调整线条,每个在tabular表格环境内的线条会调整成一样的粗细。
booktabs宏套件可以很方便的达成这个目的。
我们来看看这个提供了什么方便的指令:
指令
功能
\toprule[线条粗细]
画表格顶端的横线
\midrule[线条粗细]
画表格里头的横线
\bottomrule[线条粗细]
画表格底部的横线
\cmidrule
指令某个字段画横线,取代原来的\cline
使用方法和tabular环境差不多,连环境名称都一样,但可在指令后加个方括号来指定线条的粗细,不指定的话,toprule及bottomrule都会比中间的其他线条粗一点。
其中cmidrule另有更进一步的功能:
\cmidrule[线条粗细](左右是否去边){画线字段}
其中「画线字段」和\cline一样,指定字段数即可,例如2-3。
左右去边要表明左(l)或/及右(r),也可由大括号指定要去掉多少(预设0.5em),如:
(lr{0.7em}){2-3}。
我们把example16拿来改一下,大家试着看看有什么不同,编译好的例子如下:
http:
//edt1023.sayya.org/tex/latex123/example19.tex
http:
//edt1023.sayya.org/tex/latex123/example19.pdf
由于屏幕分辨率的关系,如果分不出不同,请由打印机印出来比较,或将档案放大再来观察。
这里最粗的是toprule及bottomrule再来是midrule,最细的是cmidrule。
而且booktabs已经调整过原来tabular表格的上下间距,除非想得更大,不然的话,不需另外再去设定arraystretch的值了。
8.7彩色表格(colortbl)
彩色表格已经是很普遍,但千万要小心喧宾夺主的情况,也别弄成了大花脸。
因此,淡色系可能会比较合适。
我们在第3.4.3.1小节及example13曾提到过colorpackage的引用,但并没有详细说明这个套件的用法,而colortbl会使用到这些颜色的功能,因此这里稍微说明一下。
8.7.1color宏套件
这是附在LaTeX工具组graphicspackage中的一个宏,使用上非常简单,只要把color宏在文稿preamble区引上就可以使用颜色了。
以下是常要用到的控制指令:
指令
作用
\color{颜色}
这会使用文章所有内容都使用这个颜色
\definecolor
定义颜色
\textcolor{颜色}{文字内容}
让文字内容使用某特定颜色
\pagecolor{颜色}
这是在设定背景颜色,本页及其后的页面会使用这个背景颜色
\normalcolor{颜色}
回复原来的颜色
\colorbox{颜色}{文字内容}
这是方框背景的颜色
\fcolorbox{框色}{框内背景色}{文字内容}
这是方框颜色和其内背景颜色不同
这里要注意的是,指令里头使用的颜色,必需是有定义过的颜色才能使用。
color宏只定义了一些基本颜色,red,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.