多年来我编写了一些库。这些库有时相互依赖。
因此,“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 中设置路径,它将起作用:local
TEXINPUTS
\usepackage{mymacros}
\makeatletter
\def\input@path{{local/}}
\makeatother
\documentclass{article}
\usepackage{mymacros}
\stop
其中\input@path
,每个文件夹都是一个组中的文件夹列表,因此请注意此单个文件夹列表的{}
两倍。{{
local/