Bru*_*uno 42 latex packages xelatex
我使用了一些不属于texlive的.sty文件,并希望将它们放在我的main.tex文件夹的子目录中.我使用以下行加载包:
\usepackage{sty/prettythesis}
Run Code Online (Sandbox Code Playgroud)
这有效,但使用xelatex和使用橡胶编译main.tex 会给我一个警告:
sty/prettythesis.sty: You have requested package `sty/prettythesis',
but the package provides `prettythesis'. (page 1)
Run Code Online (Sandbox Code Playgroud)
有没有办法防止这种警告或处理这种情况,而不必在所有.sty-files'\ ProvidePackage命令中包含"sty \"或设置TEXINPUTS环境变量(这似乎不能从main.tex本身) ?
sda*_*aau 19
我相信这个帖子在这里:
谈到完全相同的事情:看来,唯一的选择是使用TEXINPUTS环境变量; 或使用导入包.(注意,import包装上有一个变体......包括tex文件第3页.)
关于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.
正如您所发现的,将包放在子目录中(例如,./sty/prettythesis.sty相对于位于 的主.tex文件./),然后通过调用包
\usepackage{sty/prettythesis}
Run Code Online (Sandbox Code Playgroud)
将成功加载包,但会产生警告
sty/prettythesis.sty: You have requested package `sty/prettythesis',
but the package provides `prettythesis'. (page 1)
Run Code Online (Sandbox Code Playgroud)
如果您想要的只是摆脱此警告,并且您可以对文件进行少量修改.sty,那么您可以简单地更改它报告的包名称,方法是将命令更改\ProvidesPackage为
\ProvidesPackage{sty/prettythesis}
Run Code Online (Sandbox Code Playgroud)
如果您要在负载周围移动它,这可能会很不方便,但修改负载也不错。
更好的是,如果您拥有的是标准 TeX 包的特定修改版本(例如natbib 的这个补丁),那么包名称的更改清楚地表明了它提供的包,并且如果您重用文件,那么它(很可能)会重新发出警告,提示您确保您知道自己在做什么。
您可以在 TeX 文件中执行此操作,而无需更改系统环境(不要忘记/每个目录的尾部斜杠):
\makeatletter
\def\input@path{{../one-directory/}{../another-directory/}}
\makeatother
\documentclass{myclass}
\usepackage{mypackage}
Run Code Online (Sandbox Code Playgroud)
不过,出于可移植性的考虑,可能不建议采用这种方式。TEXINPUTS正如其他答案提到的,“正确”的方法是在调用乳胶之前在系统环境中设置变量;在 Windows 中是这样的(您可以将其放在批处理文件中):
set TEXINPUTS=../one-directory/;../another-directory/;%TEXINPUTS%
pdflatex myfile.tex
Run Code Online (Sandbox Code Playgroud)
只需在 makefile 或构建脚本中调用 pdflatex (或 Latex)之前添加以下行:
export TEXINPUTS=".:./sty:"
Run Code Online (Sandbox Code Playgroud)
然后将您的包引用为:
\usepackage{prettythesis}
Run Code Online (Sandbox Code Playgroud)