1 介紹
在我們使用 LaTeX 的過程中,經(jīng)常會創(chuàng)建一些我們自己的 .sty 和 .cls 文件。本文介紹了如何設(shè)置 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 文件所在的目錄下即可。這是一種比較簡單的方法,在包或類僅復(fù)用幾次的情況下,將其粘貼到對應(yīng)的 .tex 文件所在目錄都是不錯的選擇。但是如果我們需要多次復(fù)用這些包(類)或者這些包(類)仍在開發(fā)中需要不斷的修改。這種方法就十分不合理了,因為每次包(類)的更新都需要手動的修改所有文件。
下面提供的方法能夠讓 LaTeX 像使用標(biāo)準(zhǔn)包一樣找到我們自定義的包(類)。本教程使用的操作系統(tǒng)為 Win10.使用的 LaTex 環(huán)境為 texlive2018 和 TeXstudio 2.12.10.在 linux 下的操作步驟和本文類似,只是對應(yīng)的目錄稍有不同。
2 一種簡單的方法
在 cmd 命令行中輸入下面命令查看文件搜索的家目錄。
kpsewhich -var-value=TEXMFHOME
我這里顯示為 C:/Users/10091/texmf 。接下來對應(yīng)的創(chuàng)建目錄 C:\Users\10091\texmf\tex\latex 。一般情況下后三級目錄是不存在的需要我們手動創(chuàng)建。創(chuàng)建完畢之后,我們將自己編寫的 .sty 和 .cls 文件放到該目錄下即可。當(dāng)然在該目錄下創(chuàng)建更多目錄也是允許的,比如創(chuàng)建 C:\Users\10091\texmf\tex\latex\mysty 文件夾用來放置文件類,創(chuàng)建 C:\Users\10091\texmf\tex\latex\mycls 文件夾用來放置包。
放置完畢后,我們可以在命令行中輸入下面命令來檢查一下 LaTeX 是否能找到對應(yīng)的包(類)。
kpsewhich 文件名.sty(.cls)
如這里我創(chuàng)建了名為 ldbox.sty 的包放置到 mysty 文件夾下,輸入 kpsewhich ldbox.sty 時就會輸出 C:\Users\10091\texmf\tex\latex\mysty\ldbox.sty 。
3 詳細的配置方法
3.1 添加包(類)搜索路徑
上面我們給出了一種較為快速的添加自定義包(類)的方法。本質(zhì)上是將我們的自定義文件放置到 LaTeX 搜索目錄下,而不是添加額外的搜索路徑。下面將較為詳細的介紹 texlive 搜索路徑的配置過程。
texlive 有兩個配置文件,一個是全局配置文件一個是用戶配置文件,可以通過輸入下面命令查看配置文件的所在位置。
kpsewhich -a texmf.cnf
我這里顯示內(nèi)容如下:
d:/software3/texlive/2018/texmf.cnf
d:/software3/texlive/2018/texmf-dist/web2c/texmf.cnf
其中第一個是用戶配置文件,用來保存用戶的個人配置。第二個是全局配置文件,全局配置文件在更新時會丟失所有的配置,因此不建議修改全局配置文件而是修改個人配置。
首先查看全局配置文件,這里我們關(guān)心其中的兩個變量 TEXMF 和 TEXMFLOCAL。TEXMF 變量保存了所有的搜索路徑。該變量的在文中定義如下:
TEXMF = {...,$TEXMFHOME,!!$TEXMFLOCAL,...}
可以看到 TEXMF 變量包含了 TEXMFLOCAL 和上一節(jié)我們提到的 TEXMFHOME 。同樣的我們也可以在命令行中 kpsewhich -var-value=變量名 來查看 TEXMF 和 TEXMFLOCAL 變量的值。
由于 TEXMF 變量包含了 TEXMFLOCAL 變量,所以這里我們在用戶配置文件中定義 TEXMFLOCAL 變量即可。我這里定義 TEXMFLOCAL 如下:
TEXMFLOCAL=D:/software3/texlive/myLib
如果需要添加多個搜索路徑的話,使用,分割。且結(jié)尾不包含逗號和反斜杠,如:
TEXMFLOCAL=D:/software3/texlive/myLib,d:/myTexLib2
同樣在搜索目錄下創(chuàng)建 tex/latex 目錄,然后將自定義的包(類)放到該目錄下。
注意:LaTeX 只搜索設(shè)定目錄中 text/latex 子路徑下的包(類)文件。對應(yīng)這里為 D:/software3/texlive/myLib/tex/latex。
然后在命令行輸入下面命令來更新包(類)數(shù)據(jù)庫:
texhash
這一點和上一節(jié)不同,上一節(jié)中我們直接將文件放到對應(yīng)文件夾中即可,并不需要輸入更新命令。
最后同樣可以輸入 kpsewhich 文件名.sty(.cls) 來驗證是否能夠找到對應(yīng)的自定義包(類)。
下圖給出了上面提到的幾個命令及其運行結(jié)果:

3.2 添加資源文件搜索路徑
有時候我們在編寫自定義的文檔類時會使用到一些圖片,如給首頁添加一張背景圖片或添加 logo 到頁眉中。這些圖片應(yīng)該放置什么地方呢?如果我們使用模板時是將模板放置到.tex 文件夾下(本文的方法一),則這些圖片和普通的.tex文件調(diào)用圖片放置到相同目錄下即可。
如果我們使用上面的方法二和方法三來添加自定義文檔類時,則只需要將其放置在搜索路勁下的 tex/latex/文檔類所在文件夾/resources 文件夾下即可(文檔類指的是.cls 后綴的文件)。我這里對應(yīng)的路徑為:
D:\software3\texlive\myLib\tex\latex\obit\resources
即使是添加了資源,也應(yīng)該使用 texhash 命令來更新數(shù)據(jù)庫。更多關(guān)于 TEX 目錄結(jié)構(gòu)(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 總結(jié)
在 texlive 中使用自定義的包(類)一共有三種方法:
- 直接將自定義的包(類)放置到需要使用的
.tex所在文件夾下。最為簡單但局限性很大。 - 將自定義的包(類)放置到預(yù)定義的目錄(
TEXMFHOME)下。這種方法無需更新數(shù)據(jù)庫,較為簡單且局限性較小。 - 將自定義的包(類)放置到自定義的目錄(通過
TEXMFLOCAL指定)下。除了要放置文件外,還需要手動更新數(shù)據(jù)庫。該方法靈活性很高。