2010-10-14 17 views
36

Uso alcuni file .sty che non fanno parte di texlive e voglio averli in una sottodirectory della cartella con il mio main.tex. Ho usato la seguente riga per caricare il pacchetto:Come caricare i file .sty in lattice da una sottodirectory?

\usepackage{sty/prettythesis} 

Questo funziona, ma la compilazione del main.tex con XeLaTeX e utilizzando rubber mi dà un avvertimento:

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

C'è un modo per evitare questo avvisare o gestire questo caso senza dover includere "sty \" in tutti i comandi .sty-files '\ ProvidesPackage o impostare la variabile d'ambiente TEXINPUTS (che sembra non essere possibile dallo stesso main.tex)?

risposta

13

Credo che questa discussione qui:

parla esattamente la stessa cosa: a quanto pare, le uniche alternative sono o usando TEXINPUTS variabile d'ambiente; oppure utilizzando lo import package. (nota, c'è una variante del pacchetto import su ...Including tex files pg 3.)

Un po 'di più TEXINPUTS:

Spero che questo aiuti;
Cheers!

 

EDIT: ho sperato che si potrebbe impostare il percorso TEXINPUTS direttamente nel file tex (utilizzando \write18 - e la nota, alcune versioni di LaTeX usano --enable-write18, il mio usa -shell-escape per consentire \write18; vedere anche this) - ma sembra che non sia possibile:

"... questo non è possibile ... la variabile di ambiente del processo figlio è impostato, ma questo non ha un effetto. al suo processo genitore (TeX). "(Re: Setting the environmental variable TEXINPUTS within latex - comp.text.tex).

...Così, ora mi basta chiamare pdflatex nella mia Linux bash in questo modo:

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

e poi si risolvere direttamente \usepackage{mypackage} nel file myfile.tex - anche se mypackage.sty è in una sottodirectory, dicono ./subdir/mypackage.sty.

2

In poche parole riga sotto prima della chiamata a pdflatex (o lattice) nel makefile o costruire script:

export TEXINPUTS=".:./sty:" 

quindi fare riferimento a vostro pacchetto come:

\usepackage{prettythesis} 
+1

In questo modo non è possibile trovare altri pacchetti, nel mio caso. Come sapere quali directory predefinite aggiungere anche alla variabile di ambiente? – gigabytes

+1

Secondo la documentazione ufficiale, _should_ trova pacchetti di sistema. ("man pdftex" nel mio sistema lo dice). Non ti mancano i due punti finali (":")? –

+0

sì, quello è stato l'errore – gigabytes

0

Come si scoprì, mettendo il pacchetto in una sottodirectory (ad esempio, ./sty/prettythesis.sty rispetto al file principale .tex allo ./) e chiamando il pacchetto tramite

\usepackage{sty/prettythesis} 

sarà caricare correttamente il pacchetto, ma produrrà l'avviso

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

Se invece si è sbarazzarsi di questo avviso, e tu sei OK con piccole modifiche nel file .sty , allora si può semplicemente cambiare il nome del pacchetto che riporta, modificando il comando \ProvidesPackage per

\ProvidesPackage{sty/prettythesis} 

Questo può essere sconveniente se lo si sta spostando intorno a carichi, ma il carico di modifiche non è poi così male.

Ancora meglio, se quello che hai dentro è uno specifico, versione modificata di un pacchetto TeX standard (come, ad esempio, this patch of natbib), quindi il cambiamento del nome del pacchetto indica chiaramente quale pacchetto è fornire, e se si riutilizza il file poi (molto probabilmente) rileverà un avvertimento per spingerti ad assicurarti di sapere cosa stai facendo.

Problemi correlati