如何从子目录加载latex .sty文件?

时间:2010-10-14 18:57:33

标签: latex packages xelatex

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

\usepackage{sty/prettythesis}

这样可行,但是使用xelatex编译main.tex并使用rubber会给我一个警告:

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

有没有办法阻止此警告或处理此案例而不必在所有.sty-files'\ ProvidePackage命令中包含“sty \”或设置TEXINPUTS环境变量(这似乎不可能来自主要。 tex本身)?

4 个答案:

答案 0 :(得分:18)

我相信这个帖子在这里:

正好谈论同样的事情:看起来,唯一的选择是使用TEXINPUTS环境变量;或使用import package。 (请注意,...Including tex files pg 3. 上的import包中有一个变体)

关于TEXINPUTS的更多信息:

希望这会有所帮助;
干杯!

编辑:我希望可以直接在tex文件中设置TEXINPUTS路径(使用\write18 - 并注意,某些版本的LaTeX使用--enable-write18,我使用{{ 1}}启用-shell-escape;另请参阅this ) - 但似乎不可能:

  

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

...所以,现在我只需在我的Linux \write18中拨打pdflatex

  

bash

然后它会直接解析TEXINPUTS=.//:$TEXINPUTS pdflatex ./myfile.tex文件中的\usepackage{mypackage} - 即使myfile.tex位于子目录中,例如mypackage.sty

答案 1 :(得分:4)

在makefile或build脚本中调用pdflatex(或latex)之前,只需在下面添加一行:

export TEXINPUTS=".:./sty:"

然后将您的包引用为:

\usepackage{prettythesis}

答案 2 :(得分:2)

您可以在不更改系统环境的情况下在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

答案 3 :(得分:1)

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

调用包
\usepackage{sty/prettythesis}

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

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

如果您只想摆脱此警告,并且您可以在.sty文件中进行少量修改,那么您只需更改{{1即可更改其报告的包名称命令

\ProvidesPackage

如果您要在负载附近移动它,这可能会很不方便,但修改负载也不是太差。

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