2010-10-14 29 views
36

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

\usepackage{sty/prettythesis} 

Cela fonctionne, mais la compilation du main.tex avec xelatex et en utilisant rubber me donne un avertissement:

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

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

Répondre

13

Je crois que ce fil ici:

parle exactement la même chose: il semble donc, les seules alternatives sont soit en utilisant TEXINPUTS variable d'environnement; ou en utilisant le import package. (note, il est une variante sur le paquet import sur ...Including tex files pg 3.)

Un peu plus sur TEXINPUTS:

Espérons que cela aide;
À la votre!

 

EDIT: Je souhaite que l'on pourrait définir le chemin de TEXINPUTS directement dans le fichier tex (en utilisant \write18 - et la note, certaines versions de LaTeX utilisent --enable-write18, la mine utilise -shell-escape pour permettre \write18, voir aussi this) - mais il semble que ce n'est pas possible:

"... ce n'est pas possible ... la variable d'environnement du processus de l'enfant est défini, mais cela n'a pas d'effet. à son processus parent (TeX). "(Re: Setting the environmental variable TEXINPUTS within latex - comp.text.tex)

...Donc, maintenant je viens appeler pdflatex dans mon Linux bash comme ceci:

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

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

2

ligne En termes simples ci-dessous avant l'appel à PDFLATEX (ou latex) dans votre makefile ou script de construction:

export TEXINPUTS=".:./sty:" 

ensuite référencer votre paquet:

\usepackage{prettythesis} 
+1

Cela rend impossible de trouver d'autres paquets, dans mon cas. Comment savoir quels répertoires par défaut ajouter à la variable d'environnement? – gigabytes

+1

Selon la documentation officielle, il devrait être possible de trouver des paquets système. ("man pdftex" dans mon système le dit). Vous ne manquez pas le deux-points final (":")? –

+0

oui, c'était l'erreur – gigabytes

0

Comme vous avez découvert, mettre la package dans un sous-répertoire (par exemple, ./sty/prettythesis.sty par rapport à votre fichier principal .tex à ./), et l'appel du package via

\usepackage{sty/prettythesis} 

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

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

Si vous voulez tout est de se débarrasser de cet avertissement, et vous êtes OK avec des modifications mineures dans le fichier .sty , alors vous pouvez simplement changer le nom du paquet qu'il rapporte, en changeant la commande \ProvidesPackage à

\ProvidesPackage{sty/prettythesis} 

Cela peut être gênant si vous allez le déplacer autour de charges, mais la charge de modifications n'est pas trop mauvaise non plus. Encore mieux, si vous disposez d'une version spécifique et modifiée d'un package TeX standard (par exemple, this patch of natbib), la modification du nom du package indique clairement quel package est fourni et si vous réutilisez le fichier, il (probablement) relancez un avertissement pour vous inciter à vous assurer que vous savez ce que vous faites.