textlive中添加自定义包或类

2018-10-18  本文已影响0人  刘亚彬92

1 介绍

在我们使用 LaTeX 的过程中,经常会创建一些我们自己的 .sty.cls 文件。本文介绍了如何设置 texlive 的搜索路径,使其能够搜索到我们自定义的包或者类文件。本文主要参考了 Where do I place my own .sty or .cls files,to make them available to all my .tex files?How to register my own packages or classes in a separate drive to TeX Live installation? .

如果我们编写的包或者类只使用一次,只需要将其放置到使用这些包或者类的 .tex 文件所在的目录下即可。这是一种比较简单的方法,在包或类仅复用几次的情况下,将其粘贴到对应的 .tex 文件所在目录都是不错的选择。但是如果我们需要多次复用这些包(类)或者这些包(类)仍在开发中需要不断的修改。这种方法就十分不合理了,因为每次包(类)的更新都需要手动的修改所有文件。

下面提供的方法能够让 LaTeX 像使用标准包一样找到我们自定义的包(类)。本教程使用的操作系统为 Win10.使用的 LaTex 环境为 texlive2018TeXstudio 2.12.10.在 linux 下的操作步骤和本文类似,只是对应的目录稍有不同。

2 一种简单的方法

在 cmd 命令行中输入下面命令查看文件搜索的家目录。

kpsewhich -var-value=TEXMFHOME

我这里显示为 C:/Users/10091/texmf 。接下来对应的创建目录 C:\Users\10091\texmf\tex\latex 。一般情况下后三级目录是不存在的需要我们手动创建。创建完毕之后,我们将自己编写的 .sty.cls 文件放到该目录下即可。当然在该目录下创建更多目录也是允许的,比如创建 C:\Users\10091\texmf\tex\latex\mysty 文件夹用来放置文件类,创建 C:\Users\10091\texmf\tex\latex\mycls 文件夹用来放置包。

放置完毕后,我们可以在命令行中输入下面命令来检查一下 LaTeX 是否能找到对应的包(类)。

kpsewhich 文件名.sty(.cls)

如这里我创建了名为 ldbox.sty 的包放置到 mysty 文件夹下,输入 kpsewhich ldbox.sty 时就会输出 C:\Users\10091\texmf\tex\latex\mysty\ldbox.sty

3 详细的配置方法

3.1 添加包(类)搜索路径

上面我们给出了一种较为快速的添加自定义包(类)的方法。本质上是将我们的自定义文件放置到 LaTeX 搜索目录下,而不是添加额外的搜索路径。下面将较为详细的介绍 texlive 搜索路径的配置过程。

texlive 有两个配置文件,一个是全局配置文件一个是用户配置文件,可以通过输入下面命令查看配置文件的所在位置。

kpsewhich -a texmf.cnf

我这里显示内容如下:

d:/software3/texlive/2018/texmf.cnf
d:/software3/texlive/2018/texmf-dist/web2c/texmf.cnf

其中第一个是用户配置文件,用来保存用户的个人配置。第二个是全局配置文件,全局配置文件在更新时会丢失所有的配置,因此不建议修改全局配置文件而是修改个人配置。

首先查看全局配置文件,这里我们关心其中的两个变量 TEXMFTEXMFLOCALTEXMF 变量保存了所有的搜索路径。该变量的在文中定义如下:

TEXMF = {...,$TEXMFHOME,!!$TEXMFLOCAL,...}

可以看到 TEXMF 变量包含了 TEXMFLOCAL 和上一节我们提到的 TEXMFHOME 。同样的我们也可以在命令行中 kpsewhich -var-value=变量名 来查看 TEXMFTEXMFLOCAL 变量的值。

由于 TEXMF 变量包含了 TEXMFLOCAL 变量,所以这里我们在用户配置文件中定义 TEXMFLOCAL 变量即可。我这里定义 TEXMFLOCAL 如下:

TEXMFLOCAL=D:/software3/texlive/myLib

如果需要添加多个搜索路径的话,使用,分割。且结尾不包含逗号和反斜杠,如:

TEXMFLOCAL=D:/software3/texlive/myLib,d:/myTexLib2

同样在搜索目录下创建 tex/latex 目录,然后将自定义的包(类)放到该目录下。

注意:LaTeX 只搜索设定目录中 text/latex 子路径下的包(类)文件。对应这里为 D:/software3/texlive/myLib/tex/latex

然后在命令行输入下面命令来更新包(类)数据库:

texhash

这一点和上一节不同,上一节中我们直接将文件放到对应文件夹中即可,并不需要输入更新命令。

最后同样可以输入 kpsewhich 文件名.sty(.cls) 来验证是否能够找到对应的自定义包(类)。

下图给出了上面提到的几个命令及其运行结果:

命令及运行结果

3.2 添加资源文件搜索路径

有时候我们在编写自定义的文档类时会使用到一些图片,如给首页添加一张背景图片或添加 logo 到页眉中。这些图片应该放置什么地方呢?如果我们使用模板时是将模板放置到.tex 文件夹下(本文的方法一),则这些图片和普通的.tex文件调用图片放置到相同目录下即可。

如果我们使用上面的方法二和方法三来添加自定义文档类时,则只需要将其放置在搜索路劲下的 tex/latex/文档类所在文件夹/resources 文件夹下即可(文档类指的是.cls 后缀的文件)。我这里对应的路径为:

D:\software3\texlive\myLib\tex\latex\obit\resources

即使是添加了资源,也应该使用 texhash 命令来更新数据库。更多关于 TEX 目录结构(TEX Directory Structure 简称TDS)可以参考 How to write a LaTeX package that bundles not only .sty and .cls files but also some logos in .pdf or .eps formats? 的回答以及文档 A Directory Structure for TEX Files

4 总结

在 texlive 中使用自定义的包(类)一共有三种方法:

上一篇下一篇

猜你喜欢

热点阅读