textlive中添加自定义包或类

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 中使用自定义的包(类)一共有三种方法:

  • 直接将自定义的包(类)放置到需要使用的 .tex 所在文件夹下。最为简单但局限性很大。
  • 将自定义的包(类)放置到预定义的目录(TEXMFHOME)下。这种方法无需更新数据库,较为简单且局限性较小。
  • 将自定义的包(类)放置到自定义的目录(通过TEXMFLOCAL指定)下。除了要放置文件外,还需要手动更新数据库。该方法灵活性很高。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容