宏包就是Latex发行版(TexLive、MikTex等)的插件功能,通过安装不同的宏包可以获得更多的功能。一般情况下,Latex的发行版都自带了一些宏包(多是CTAN中的),以便于使用者快速的编译。这些宏包默认安装在texmf/tex/latex/下,这里texmf是“Tex and MetaFont”的缩写,指代Latex发行版的目录树。以Windows
7 下MikTex2.9为例,texmf=“D:\Program Files\MiKTeX 2.9\”。宏包的功能可以通过CTAN的搜索功能查询到。
一个宏包往往包含一个文件或多个文件,这些文件利用Tex命令定义了新的命令,用来改变Latex默认的功能。这些文件主要有两种类型:clas文件,以.cls为后缀;类型文件,以.sty为后缀。其它类型的文件多是辅助文件。当编译一篇tex文档时,如果引用某个缺失的宏包时,编译程序会报package missing的错误。当然,这些宏包是可以更新的。一个Latex发行版理论上可以安装任意多的宏包,但是,一篇文档可以使用的宏包数目是受限制的。
虽然Latex发行版自带的宏包已经很多,并且自带的Package Manager也能自动从CTAN上下载和安装宏包。但是,宏包的数量远比CTAN拥有的为多。所以,下面介绍下安装宏包的三种方式:
1. 傻瓜式安装
第一种方式比较简单,就是下载.cls或者.sty格式的文件,直接放在编译的目录下与主文件一起运行。这种方式简单易行,但是每次使用都要复制过去,更新也不易,如果使用几十个宏包,会使得编译目录里文件过多。只适合要使用期刊模板的情况。
2. 自动安装
目前,多数的Latex发行版都带有宏包管理器,如TexLive的tlmgr,MikTex的Package Manager。对于TexLive,可以使用如下命令自动安装:
tlmgr install <package1> <package2> ...
tlmgr remove <package1> <package2> ...
对于MikTex,使用 Start -> All Programs -> MikTex -> Settings(admin),记得使用管理员模式来更改。
3. 手动安装
手动安装相对前两种方式要稍微复杂些。如果你下载的宏包里包含sty等格式的必需文件,说明宏包已经经过编译了,可以直接跳到第三步;如果没有,对于较复杂的包,一般包含五个步骤:
(a)提取文件:在下载的宏包里找到后缀名为.ins格式的文件,然后运行“latex yourfilename.ins”命令或者用Latex发行版打开ins文件进行编译。此步骤可以从dtx格式的文件中提取制定的内容并生成需要的文件。
(b)创建文档:接着利用dtx文件创建说明文档,运行命令“latex yourfilename.dtx”。此步骤可以创建一个dvi格式的说明文档,以说明该宏包的功能。
(c)安装文件:此步是最关键的一步,也是容易出错的一步。此步骤的作用是将生成的必需文件,如cls文件和sty文件放到合适的本地位置,以便Latex发行版能够找到。关键是如何定义合适的本地位置呢?在Tex及其衍生物中,所谓合适的本地位置,就是以TDS(Tex Directory Structure)规则组织的文件夹及其子文件夹,也就是一个自定义的目录。一般情况,这个自定义的目录最上层的名字为texmf-local或者texmf。在不同的发行版本下,具体也不一样:
- MacTex:Users/username/Library/texmf/.
- Unix-type Systems:~/texmf.
- MikTex:任意名字,但是子目录要满足一定的规则,具体规则在这里。
TDS定义了不同类型的文件存放的位置不同。比如sty格式文件,一般放在texmf/tex/latex下不同的文件夹下,文件夹的名字即是宏包的名字。下面的表格中给出了文件存放的规则:
Type | Directory (under texmf/ or texmf-local/) | Description |
---|---|---|
.afm | fonts/afm/foundry/typeface | Adobe Font Metrics for Type 1 fonts |
.bst | bibtex/bst/packagename | BibTeX style |
.cls | tex/latex/base | Document class file |
.dvi | doc | package documentation |
.enc | fonts/enc | Font encoding |
.fd | tex/latex/mfnfss | Font Definition files for METAFONT fonts |
.fd | tex/latex/psnfss | Font Definition files for PostScript Type 1 fonts |
.map | fonts/map/ | Font mapping files |
.mf | fonts/source/public/typeface | METAFONT outline |
doc | package documentation | |
.pfb | fonts/type1/foundry/typeface | PostScript Type 1 outline |
.sty | tex/latex/packagename | Style file: the normal package content |
.tex | doc | TeX source for package documentation |
.tex | tex/plain/packagename | Plain TeX macro files |
.tfm | fonts/tfm/foundry/typeface | TeX Font Metrics for METAFONT and Type 1 fonts |
.ttf | fonts/truetype/foundry/typeface | TrueType font |
.vf | fonts/vf/foundry/typeface | TeX virtual fonts |
others | tex/latex/packagename | other types of file unless instructed otherwise |
(d)更新索引:最后更新Latex发行版的索引文件,以便Latex发行版能找到新安装的宏包。不同的发行版使用了不同的索引器:
- teTeX, TeX Live, fpTeX:texhash.
- web2c: mktexlsr
- MacTeX: MacTeX appears to do this for you.
- MikTeX: initexmf --update-fndb;或者使用GUI,即Start -> All Programs -> MikTex -> Settings(admin)下第一个tab,点击“Refresh FNDB”按钮即可。
(e)更新字体映射图:如果一个宏包还顺带安装了一些字体,还应该更新字体的映射。详细方法参详这里。
此外,还有一些老版本的宏包并没有参照TDS格式,因此只能使用前两种方式。
此文参考了Wikibooks Latex和stackexchange上的一些讨论。