How to load latex .sty files from a subdirectory?

Viewed 39130

I use some .sty-files that are not part of texlive and want to have them in a subdirectory of the folder with my main.tex. I used the following line to load the package:

\usepackage{sty/prettythesis}

This works, but compiling the main.tex with xelatex and using rubber gives me a warning:

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

Is there a way to prevent this warning or handle this case without having to include "sty\" in all .sty-files' \ProvidesPackage command or set the TEXINPUTS environment variable (which seems not to be possible from the main.tex itself)?

4 Answers

I believe this thread here:

talks about precisely the same thing: so it seems, the only alternatives are either using TEXINPUTS environment variable; or using the import package. (note, there is a variant on the import package on ...Including tex files pg 3.)

A bit more about TEXINPUTS:

Hope this helps;
Cheers!

 

EDIT: I hoped that one could set the TEXINPUTS path directly in the tex file (by using \write18 -- and note, some versions of LaTeX use --enable-write18, mine uses -shell-escape to enable \write18; see also this) - but it seems it is not possible:

"... This isn't possible. ... The environment variable of the child process is set, but this hasn't an effect to its parent process (TeX)." (Re: Setting the environmental variable TEXINPUTS within latex - comp.text.tex).

... so, now I just call pdflatex in my Linux bash like this:

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

and then it will resolve directly \usepackage{mypackage} in the myfile.tex file - even if mypackage.sty is in a subdirectory, say ./subdir/mypackage.sty.

You can do it in your TeX file without changing your system's environment (do not forget the trailing slash / with each directory):

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

\documentclass{myclass} 
\usepackage{mypackage}

This way, though, may be not recommended for portability. As other answers mention, the "correct" way is to set the TEXINPUTS variable in your system environment before you call latex; in Windows it is (you can place it in a batch file):

set TEXINPUTS=../one-directory/;../another-directory/;%TEXINPUTS%
pdflatex myfile.tex
Related