宏包套件.docx
《宏包套件.docx》由会员分享,可在线阅读,更多相关《宏包套件.docx(12页珍藏版)》请在冰豆网上搜索。
宏包套件
【次页】:
8.表格的处理【标题页】:
latex123【前页】:
6.LaTeX的标准文稿类别 目录 索引
7.宏套件
LaTeX系统已经好久没有更新,有些部份可能会跟不上实际的脚步,而且有些内定的宏定义,经过大家的使用,发觉并不是那么的顺手,尤其是功能的强化方面,因此这章谈谈如何引用他人已经写好的宏,这很重要,尽量避免重复制造轮子,写TeX/LaTeXmacro可说是很专业的工作,要避免破坏了整体的结构,所以先找看看有什么宏套件可以使用。
7.1一般套件的使用
我们曾在第3.4.3小节,页
,提到过简单宏的引用,事实上,有些宏含有许多的参数来做微调,但是每个宏套件的参数都不会一样,因此,使用套件之前要先看一看他所附上的使用手册。
几乎大部份的宏套件都有使用手册,如果是系统上就有的宏,那么这些文件通常会放在:
$TEXMF/doc=>Unix-like系统
$TEXMF\doc=>DOS/Windows系统
这些目录底下,这些文件会有原始TeX/LaTeX文稿,也有编译好的*.dvi或POSTSCRIPT档可以阅览,为求方便的话,可以将他们转成pdf格式来阅览,原因是可以以关键词来搜寻全文,在查指令、环境时会比较方便。
在Unix-like系统或Windows下的cygwin环境的话,可以使用texdoc这个指令来阅览,例如:
texdocamsguide=>阅览amsguide.dvi这个档的说明
texdoc-sams=>查系统上所有含ams字样的文件
7.2LaTeX官方文件中的标准宏套件
底下是LaTeX官方文件中所附的标准宏套件。
虽然是标准宏套件,但一般情形下,使用这些packages的机会并不多,都是有特殊需要时才会引入。
7.2.1alltt
这个宏套件提供alltt环境,和verbatim环境的作用相同,只是\,{,}的作用和一般文章中相同会被LaTeX解读。
这有什么用呢?
这样一来LaTeX这个特殊标志也可以使用,也可以让环境中的文字具有颜色,或做其他变化,当然,里头的文字默认仍然是使用打字机字族的。
7.2.2doc
这是用来写LaTeX文件的宏套件,这在使用ltxdoc这个class的同时就会加载docpackage。
由于这不是用于一般的文件使用场合,所以,这里就不多谈,有兴趣的话可自行参考他的文件说明。
7.2.3exscale
由于原先的ComputerModernfont中的数学延伸符号(cmex)只有10pt大小的字型(cmex10),内文放大到large以上的字型时,例如放大到Large时,有些数学符号仍然会维持一定的大小,这时可以使用这个套件,让这些数学符号也跟着放大,例如积分符号。
exscale只有字型缩放的定义,因此只要把这个套件在preamble区引用就可以了,无需任何指令。
不过,这里要说明一下,在TeX/LaTeX里字型放大,有时可能会造成表现失真的情形,尤其是数学式子,为了顾及数学式子中各个字母间的空间安排,cmex10的设计并不适合拿来放大,可以把cmr5放大成10pt和真正的cmr10来比较就会知道表现出来会不一样,因此,如果考虑精确配合的问题,放大数学式子的字型时可能要考虑一下使用场合,尤其目前采用向量字更是如此。
请试试以下的例子,我们把cmr5、cmr10及cmr12同样放大到30pt来看看结果会不会一样:
%test-fonts.tex
\font\largecmr=cmr12at30pt
\largecmr
Thisiscmr12at30pt.
\font\largecmr=cmr10at30pt
\largecmr
Thisiscmr10at30pt.
\font\largecmr=cmr5at30pt
\largecmr
Thisiscmr5at30pt.
\bye
请注意,这是TeX文稿,不是LaTeX文稿,所以要使用tex或pdftex来编译,他的结果如下,大家可很清楚的看得出来,虽然同样是向量字,但放大时的表现并不会一样:
http:
//edt1023.sayya.org/tex/latex123/test-fonts.tex
http:
//edt1023.sayya.org/tex/latex123/test-fonts.pdf
根据Knuth教授当初设计Metafont,他的理念是一个同样的字型在放大的时候,同一个字,他的笔划置放的相对位置应该要随放大的倍数而稍加调整。
因此,假如我们只使用一种向量字体,用在不同的放大倍率的时候,文字符号间的空间配合会产生不一样的结果,尤其是用在数学式子的时候,更加明显。
当然,实用上Metafont虽然也是一种向量字体,但由于太过于复杂,不适合拿来屏幕显示上用,所以才会退而求其次,转成pk位图字体来使用。
这也就是为什么同样是cmr的字型,会有几种不同点数的独立字型的原因,纵使是向量字也是如此。
TeX已经20几岁了,但是,我们的字型技术似乎还是没有完全赶上当初Knuth教授的理念。
7.2.4fontenc
在第4.7.1小节,页
,曾提到字型编码的问题。
要改变字型编码,可以使用这个fontencpackage。
以T1fontencoding来说:
...
\usepackage[T1]{fontenc}
...
这样就可以了,但由于一些字型,例如欧洲字符,在原来的ComputermodernType1字型中安排不一样,所以,有些部份会使用原始的Metafont字型所转换成的pk点阵字,这样的话,一般打印机印出来是差异不大,但如果是想制作成PDF格式在荧光幕阅览的话,字型的表现会变得很丑。
理想的话,要安装cm-superType1字型,但是一般用户恐怕自行安装字型会有困难。
这在teTeX2.x以后的版本,已经有附上pxfonts及txfontspackage及其字型,所以,如果是新近版本的teTeX的话,可以由以下的方式来使用:
...
\usepackage{txfonts}
\usepackage[T1]{fontenc}
...
其中txfonts是仿真Times系列的字型,pxfonts是仿真Palatino系列的字型。
当然,这里关于字型的问题有点复杂,这不在这篇文章的讨论范围,只能做简单的说明,如果没有特殊需要,例如,欧洲字符、一些有重音符号的字母,那使用默认的OT1编码就行了,因为这些套件所附的有些字型,只有一种大小的Type1字型在缩放,因此使用上恐怕会有失真的情形。
7.2.5graphpap
这是产生方格纸的宏。
他提供了一个指令,可以画方格,可以配合picture环境来使用,他的语法是:
...
\usepackage{graphpap}
...
\graphpaper[n](x,y)(x1,y1)
...
其中的n如果省略的话,预设是10,他指的是方格纸的最小刻度单位。
(x,y)及(x1,y1)指的是左下角及右上角的坐标值,例如:
\documentclass{article}
\usepackage{graphpap}
\begin{document}
\graphpaper(0,0)(360,360)
\end{document}
这样会画出以10为最小刻度的方格,编译好的例子如下:
http:
//edt1023.sayya.org/tex/latex123/test-graphpap.tex
http:
//edt1023.sayya.org/tex/latex123/test-graphpap.pdf
7.2.6ifthen
TeX本身是一种排版程序语言,当然会有条件判断式来方便写宏,但如果文稿中也充满了条件判断式,将会使文稿复杂化,难以阅读、维护,因此,一般条件判断式大多数使用在宏定义,而不是写在文稿当中。
这个package就是在简化条件判断式,以便也可以方便使用在文稿当中。
ifthenpackage提供了\ifthenelse指令来做条件判断。
他后面有三个参数,第一个是条件式,第二个是条件为真的时候要执行的内容,第三个是条件为伪的时候要执行的内容。
这里不多谈他的使用,底下只提供一个实例片段:
...
\usepackage{ifthen}
...
\ifthenelse{\isodd{\thepage}}%
{\setlength{\leftmargin}{10pt}}%
{\setlength{\leftmargin}{0pt}}
...
这样奇数页时,leftmargin会设为10pt,偶数页时则为0pt。
后面加%代表,这三行是一整行,其间没有空白。
7.2.7inputenc
由于fontencpackage的一些字型编码安排,和一般所谓的Latin-1这些编码(inputencoding),他们的内容不一定相符,所以,fontencpackage常会和inputencpackage互相配合使用,以确保在使用欧洲字符、符号时能正确取得到字。
例如:
...
\usrpackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
...
\inputencoding{ascii}%也可以在文稿内文变换
...
\inputencoding{latin2}
...
\inputencoding{latin1}
...
当然,我们的文稿如果只是英美语系的文章,那这些都可以不必理会。
7.2.8latexsym
这是LaTeX额外提供的符号。
在新版的LaTeX2e并不会自动加载,要自行引入这个独立出来的package。
这主要是提供lasy*这些字型里头的符号。
如果有使用amsfonts或amssymbpackage的话,这些latexsym符号应该是可以无需引入(有少数符号是LaTeX特有的)。
至于各种符号的package有哪些内容,可以参考系统上的symbols*这些档案,他可能存在的形式是:
symbols.dvi
symbols-a4.ps[pdf]
symbols-letter.ps[pdf]
或者,也可以从CTAN下载最新的版本:
ftp:
//cam.ctan.org/tex-archive/info/symbols/comprehensive/symbols-a4.pdf
7.2.9makeidx
这是在制作索引时要引入的package,我们会在第11.3节,页
再来讨论。
7.2.10newlfont
这是仿真旧版LaTeX的字型用法,让他使用新的取字机制的package。
也就是我们在第4.7.2,页
所提到的用法。
为免麻烦,我们尽量避免使用旧用法,而使用字型的标准指令。
7.2.11oldlfont
这是仿真旧版LaTeX的字型用法的package。
7.2.12showidx
这个package会显示,\index指令下在什么地方。
这也会在第11.3节来讨论。
7.2.13syntonly
syntonlypackage提供\syntaxonly指令,他可以检查语法是否正确,并不会有*.dvi档的输出。
但这个\syntaxonly指令一定要放在preamble区。
7.2.14tracefnt
这是追踪字型使用情形的package。
通常编译时所产生的信息已经很足够,但如果希望有更详细的字型使用信息的话,可以使用这个package:
...
\usepackage[debugshow]{tracefnt}
...
请注意,这样会增加编译的时间,而且*.log档会很大。
7.3LaTeX官方文件中的工具组
这些宏套件,LaTeX官方文件是归类在相关软件(relativesoftware)中,可能会比上一节提到的标准宏套件来得实用些。
但也同时可以看得出来LaTeX非内建的套件不少,加上其他外来的宏套件,那真的是套件满天飞,我们很希望在可能的情形下LaTeXteam可以考虑将一些必要的套件纳入内建,更加落实版面处理和文稿写作分开的理念。
7.3.1AmS-LaTeX
LaTeX本身就有排版数学式子的能力,但在比较专业使用时,可能会需要增强他的功能,AmS-LaTeX是美国数学协会(AmericanMathematicalSociety,AMS)所发展的一个增强LaTeX数学式子编辑的宏组,是由AmS-TeX
indexamstex@AmS-TeX移植过来给LaTeX使用的,他主要分成两个部份:
amscls及amsmath,前者提供符合AMS的文件规格的文稿类别,后者可加强原来LaTeX的数学模式。
我们会在第10章,页
加以介绍。
7.3.2babel
如果想排版英文以外的其他欧洲国家的语文,例如:
德文、法文,那可以利用babel宏套件。
7.3.3cyrillic
这是专为排版斯拉夫民族语文,例如:
俄文,那可以使用这个套件。
7.3.4graphics
这是处理图形要用到的宏套件。
但目前一般都使用功能较完善的graphicx宏套件来取代graphics了,事实上,引用graphicx会自动的引用graphics,而在指令使用的方便性上,graphicx较佳,因此我们往后都是以graphicx为主来说明的。
这两个套件属于LaTeX的图形工具组,这个工具组包括了和颜色、图形相关的各种宏,我们会在第9章,页
来讨论。
7.3.5psnfss
这是Type1字型的宏套件组,例如:
times,charter,mathptmx等等,他会去使用这些Type1字型。
但通常这些字型有许多是商业字型,系统上不一定会有,如果没有的话,会去使用free的代替字型,或者就不嵌入这些字型了。
如果没有这些商业字型,又想要嵌入替代的Type1字型的话,可以考虑使用txfonts或pxfonts宏套件及其所附字型。
当然,如果专业使用的话,可能得考虑购买专业的商业字型来使用。
7.3.6array
这是加强原来的array,tabular环境的宏套件,可增许多细部微调的功能。
这在第8.4节,页
,时会讨论到。
7.3.7calc
这个套件可以让LaTeX接受一些简单的代数运算。
主要用于微调一些原始预设的长度及计数器(counter)。
7.3.8dcolumn
这是让表格中具有小数点的数字对齐的宏套件。
我们会在第8.9节,页
中详细讨论。
7.3.9delarray
这是加强array宏套件的功能,让矩阵或行列式的大分界符号可以使用较简单的指令。
这个套件要配合array宏套件来使用。
通常在array宏套件中,这些矩阵或行列式的大分界符号是由\left及\right来引导才会出来,但使用delarray宏则不必如此麻烦。
这在第10章会讨论到。
7.3.10hhline
这个宏套件会方便在画横线时也可以插入表格的纵线。
7.3.11longtable
longtable是用在跨页表格。
通常在LaTeX中的tabular表格是当做一个box来处理,因此无法再分割,所以无法跨页来表现。
这也会在第8.10,页
谈到表格时提及。
7.3.12tabularx
这是tabular表格环境的加强版,他可以方便的排版指定宽度的表格。
同样的,这会在第8.3节,页
时提及。
7.3.13afterpage
这个件主要在调整LaTeX的浮动环境(floatingenvironment)时,置放浮动对象,例如:
图、表的位置。
7.3.14bm
bm的意思,就是boldmath(symbol),这会让数学式子以粗体的方式来显示。
这个宏套件,提供一个\bm{}指令,只要把数学式子置于大括号中就会由粗体来显示。
7.3.15enumerate
这是加强enumerate列举式条列环境的宏套件。
他可以很方便的指定要使用什么方式来起头,原始的enumerate环境,预设第一层是阿拉伯数目字,虽然也可变更,但要重新定义,不是很方便。
这里举个例子:
%example15.tex
\documentclass{article}
\usepackage{enumerate}
\begin{document}
\begin{enumerate}[Example-1.]
\itemThisisaitem1.
\itemThisisaitem2.
\begin{enumerate}[
(1)]
\itemThisisaitem
(1).
\itemThisisaitem
(2).
\end{enumerate}
\itemThisisaitem3.
\itemThisisaitem4.
\end{enumerate}
\end{document}
可以指定会顺延显示的有:
A,a,I,i,1,如果这些是属于固定显示的部份,则要以大括号括起来,否则他会顺序计算显示。
请试着和第5.5.2小节,页
的标准enumerate环境比较一下。
编译后的结果如下:
http:
//edt1023.sayya.org/tex/latex123/example15.tex
http:
//edt1023.sayya.org/tex/latex123/example15.pdf
这里请注意一下一些同名的环境、宏套件,例如array宏套件及array环境,这里的enumerate宏套件也是一样。
7.3.16fontsmpl
这是字型sample测试package,他可以是互动的,也可以引用这个package后直接使用\fontsample这个指令来印出目前使用的字型sample。
互动的话,要自行输入字族名称。
sample文件在$TEXMF/tex/latex/tools目录下,只要下:
latexfontsmpl.tex
就可以了,他会出现:
ThisisTeX,Version3.14159(Web2C7.4.5)
(./fontsmpl.tex
LaTeX2e<2001/06/01>
Babelandhyphenationpatternsforamerican,french,
german,ngerman,nohyphenation,loaded.
(/usr/share/texmf/tex/latex/base/article.cls
DocumentClass:
article2001/04/21v1.4eStandardLaTeXdocumentclass
(/usr/share/texmf/tex/latex/base/size10.clo))(./fontsmpl.sty)
Pleaseenterafamilyname(forexample`cmr').
\family=
只要输入要测试的字型字族,例如cmr,他就会产生fontsmpl.dvi这个档,然后就可以使用dvips或dvipdfm[x]把他转成ps/pdf格式的档案。
他只会测试OT1及T1两种字型编码。
7.3.17ftnright
LaTeX在两栏式排版(two-columnmode)时,他的脚注是置放在各自字段底部。
ftnright会将两栏式排版时,把所有的脚注都置放在右栏底部。
这样可以将脚注集中,看起来不会那么凌乱。
7.3.18indentfirst
通常,LaTeX的章节开头的第一个段落是不缩排的,在第二个段落起才会缩排。
如果习惯每个段落都有缩排,可以使用indentfirstpackage。
这个套件也是引入就可以了,无需任何指令。
7.3.19layout
这是显示目前版面配置的package。
引入这个package后,只要在本文区下\layout指令,他就会画出目前的版面配置,也会将各种数据显示出来。
我们在第5.2.1小节,页
,里头所显示的版面图,就是这样画出来的。
7.3.20multicol
在LaTeX宣告文稿类别的同时,我们可以选用twocolumn来选择两栏式的排版,再多则不行。
在两栏式的排版时,我们可以使用\onecolumn及\twocolumn指令,在单栏及两栏间变换,但这有一个很严重的缺点,那就是字段变换也会迫使换新页,原来的页面将会显得空旷。
multicol的目的,不仅突破两栏,可以做多栏式的排版(最多可至十栏的排版),也可以在变换字段编排时在同一页面变换,而不必换新页。
他提供了multicols环境来做字段的变换。
他的使用方法很简单,字段数目及变换完全由环境来控制:
...
\usepackage{multicol}
...
\begin{multicols}{栏数}
...
内容,依正常单栏方式书写即可
...
\end{multicols}
请注意,引入时multicol是没有`s'的,而环境中的multicols是有`s'的。
multicolpackage处理脚注的方式,和单栏排版相同,就是通通置于本页底部,不分左右字段。
7.3.21rawfonts
这是仿真LaTeX2.09旧版的低阶字型指令,例如\texrm代表10pt的罗马字族的字。
在新版的LaTeX2e并没有定义这些指令。
7.3.22somedefs
这是写LaTeX宏的一些范例定义,可以很容易的更改其中设定来写自己的package。
这不在这篇文章的讨论范围,因此就不多谈了。
7.3.23showkeys
这个package会把\label,\ref,\pageref等交互参照的指令内容,或文献引用内容,在指令所在处印出来。
7.3.24varioref
这是加强型的交互参照的方式,我们会在第11章来讨论。
7.3.25verbatim
这是加强LaTeX原来的verbatim环境的同名套件。
可以在里头使用批注,也可以利用\verbatiminput{文件名}指令来引入外来档案,当然,引入后会自动进入verbatim环境中。
7.3.26xr
xr是eXternalReferences的缩写,意思就是交互参照外部的档案。
这会在第