我使用了一些不属于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本身)?
答案 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),那么软件包名称的更改会清楚地表明它提供的软件包,以及如果您重复使用该文件,那么它(很可能)会重新发出警告,提示您确保知道自己在做什么。