51

我使用了一些不属于 texlive 的 .sty 文件,并希望将它们放在包含我的 main.tex 的文件夹的子目录中。我使用以下行来加载包:

\usepackage{sty/prettythesis}

这行得通,但是用 xelatex 编译 main.tex 并使用橡胶给了我一个警告:

sty/prettythesis.sty: You have requested package `sty/prettythesis',
but the package provides `prettythesis'. (page 1)

有没有办法防止这个警告或处理这种情况,而不必在所有 .sty-files 的 \ProvidesPackage 命令中包含“sty\”或设置 TEXINPUTS 环境变量(这似乎不可能从 main.tex 本身) ?

4

4 回答 4

23

我相信这个线程在这里:

谈论完全相同的事情:看来,唯一的选择是使用TEXINPUTS环境变量;或使用导入包。(注意,包上有一个变体...包括 tex 文件第 3 页。import

关于 TEXINPUTS 的更多信息:

希望这可以帮助;
干杯!

 

编辑:我希望可以直接在 tex 文件中设置 TEXINPUTS 路径(通过使用\write18-- 并注意,某些版本的 LaTeX 使用--enable-write18,我的使用-shell-escape来启用\write18;另见这个) - 但似乎不可能:

...这是不可能的。...设置了子进程的环境变量,但这对其父进程(TeX)没有影响。 ”(Re:在latex中设置环境变量TEXINPUTS - comp.text.tex)。

...所以,现在我只是像这样调用pdflatex我的 Linux bash

TEXINPUTS=.//:$TEXINPUTS pdflatex ./myfile.tex

然后它将直接\usepackage{mypackage}myfile.tex文件中解析 - 即使mypackage.sty在子目录中,例如./subdir/mypackage.sty.

于 2010-12-19T13:01:59.587 回答
6

正如您所发现的,将包放在子目录中(例如,./sty/prettythesis.sty相对于您的主.tex文件在./),并通过调用包

\usepackage{sty/prettythesis}

将成功加载包,但会产生警告

sty/prettythesis.sty: You have requested package `sty/prettythesis',
but the package provides `prettythesis'. (page 1)

如果您只想摆脱此警告,并且您可以对.sty文件进行少量修改,那么您可以简单地更改它报告的包名称,方法是将\ProvidesPackage命令更改为

\ProvidesPackage{sty/prettythesis}

如果您要在负载周围移动它可能会很不方便,但修改负载也不错。

更好的是,如果您在其中拥有的是标准 TeX 包的特定修改版本(例如,这个 natbib 补丁),那么包名称的更改清楚地表明它提供的是什么包,如果您重用文件,那么它(很可能)会重新发出警告,提示您确保您知道自己在做什么。

于 2016-08-23T17:21:31.353 回答
5

您可以在您的 TeX 文件中执行此操作,而无需更改系统环境(不要忘记/每个目录的尾部斜杠):

\makeatletter
\def\input@path{{../one-directory/}{../another-directory/}}
\makeatother

\documentclass{myclass} 
\usepackage{mypackage}

但是,出于便携性考虑,可能不建议采用这种方式。正如其他答案所提到的,“正确”的方法是TEXINPUTS在调用乳胶之前在系统环境中设置变量;在 Windows 中是(您可以将其放在批处理文件中):

set TEXINPUTS=../one-directory/;../another-directory/;%TEXINPUTS%
pdflatex myfile.tex
于 2020-04-25T05:15:49.027 回答
4

只需在您的 makefile 或构建脚本中调用 pdflatex(或 latex)之前添加以下行:

export TEXINPUTS=".:./sty:"

然后将您的包引用为:

\usepackage{prettythesis}
于 2014-02-25T13:16:49.677 回答