web-dev-qa-db-fra.com

Comment charger des fichiers latex .sty à partir d'un sous-répertoire?

J'utilise des fichiers .sty qui ne font pas partie de texlive et je veux les avoir dans un sous-répertoire du dossier avec mon main.tex. J'ai utilisé la ligne suivante pour charger le package:

\usepackage{sty/prettythesis}

Cela fonctionne, mais compiler le fichier main.tex avec xelatex et utiliser rubber me donne un avertissement:

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

Existe-t-il un moyen d'éviter cet avertissement ou de gérer ce cas sans avoir à inclure "sty \" dans la commande\ProvidesPackage de tous les fichiers .sty-files ou à définir la variable d'environnement TEXINPUTS (ce qui semble impossible à partir de main.tex lui-même) ?

38
Bruno

Je crois ce fil ici:

parle exactement de la même chose: il semble donc que les seules alternatives utilisent soit la variable d'environnement TEXINPUTS; ou en utilisant le paquet import . (remarque, il existe une variante du package import sur ... Y compris les fichiers tex, page 3.)

Un peu plus sur TEXINPUTS: 

J'espère que cela t'aides;
À votre santé! 

EDIT: J'espérais pouvoir définir le chemin TEXINPUTS directement dans le fichier tex (en utilisant \write18 - et notez que certaines versions de LaTeX utilisent --enable-write18, le mien utilise -Shell-escape pour activer \write18; voir aussi this ) - mais il semble que ce ne soit pas possible: 

"... Ce n'est pas possible. ... La variable d'environnement du processus enfant est définie, mais cela n'a aucun effet sur son processus parent (TeX)." ( Re: variable d'environnement TEXINPUTS dans latex - comp.text.tex ). 

... alors, maintenant j'appelle simplement pdflatex dans ma Linux bash comme ceci: 

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

et cela résoudra directement \usepackage{mypackage} dans le fichier myfile.tex - même si mypackage.sty est dans un sous-répertoire, disons ./subdir/mypackage.sty.

15
sdaau

Mettez simplement la ligne ci-dessous avant l'appel de pdflatex (ou latex) dans votre script makefile ou build:

export TEXINPUTS=".:./sty:"

Ensuite, référencez votre paquet en tant que:

\usepackage{prettythesis}
3
Rudy Matela

Comme vous l'avez découvert, placez le paquet dans un sous-répertoire (par exemple, ./sty/prettythesis.sty par rapport à votre fichier .tex principal à ./) et appelez le paquet via

\usepackage{sty/prettythesis}

chargera avec succès le paquet, mais produira l'avertissement

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

Si vous souhaitez simplement vous débarrasser de cet avertissement et que les modifications mineures apportées au fichier .sty suffisent, vous pouvez simplement modifier le nom du package qu'il indique en modifiant la commande \ProvidesPackage en

\ProvidesPackage{sty/prettythesis}

Cela peut être gênant si vous allez le déplacer autour de charges, mais les modifications de charge ne sont pas trop mauvaises non plus.

Mieux encore, si vous avez une version modifiée spécifique d’un paquet TeX standard (comme par exemple, ce correctif de natbib ), le changement de nom du paquet indique clairement quel paquet il est fourni Si vous réutilisez le fichier, un avertissement vous sera probablement demandé afin que vous sachiez ce que vous faites.

0
E.P.