如何维护和导入自制库

如何维护和导入自制库

多年来我编写了一些库。这些库有时相互依赖。

因此,“tex”目录的结构如下:

tex
├── library
|   ├── library1.sty
|   ├── library2.sty
|   └── library3.sty
├── project1
|   ├── master.tex
|   ├── chapter1.tex
|   └── chapter2.tex
├── project2
|   └── article.tex
└── project3
    └── paper.tex

这些库相互依赖。因此,在每个依赖另一个库的库中,这是标头的一部分:

%library2.sty
\ProvidesPackage{library2}
\RequirePackage{../library/library1}

换句话说,库是从“每个项目的根目录”导入的。这不是一个好的设计选择。如果有人复制了项目根目录中的库,或者文件夹“library”被重命名了,该怎么办?

然而,“活动目录”仍然保留在项目根目录中是合理的。

怎样才能解决此类库依赖问题?

答案1

\RequirePackage{../library/library1}

应该

\RequirePackage{library1}

大概每次都会在日志中发出警告?(除非库 1 有\ProvidesPackage{../library/library1}

提供包机制就是为了强制执行这\usepackage一点\RequirePackage\documentclass采取名称不是文件路径,以增加可移植性。

只要您的顶级tex目录在TEXINPUTS路径中,tex//那么就会找到所有包,而无需将特定于机器的路径放入文件中。


如果设置环境变量不方便,LaTeX 还有另一种机制,更为人所知\graphicspath但实际上适用于所有文件。

如果你有一个不在的mymacros.sty子目录,那么如果你在 latex 中设置路径,它将起作用:localTEXINPUTS\usepackage{mymacros}

\makeatletter
\def\input@path{{local/}}
\makeatother
\documentclass{article}
\usepackage{mymacros}

\stop

其中\input@path,每个文件夹都是一个组中的文件夹列表,因此请注意此单个文件夹列表的{}两倍。{{local/

相关内容