美文网首页
textlive中添加自定义包或类

textlive中添加自定义包或类

作者: 刘亚彬92 | 来源:发表于2018-10-18 10:30 被阅读0次

    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指定)下。除了要放置文件外,还需要手动更新数据库。该方法灵活性很高。

    相关文章

      网友评论

          本文标题:textlive中添加自定义包或类

          本文链接:https://www.haomeiwen.com/subject/wfjjzftx.html