it-swarm.dev

Jak załadować pliki .sty latex z podkatalogu?

Używam niektórych plików .sty, które nie są częścią texlive i chcę je mieć w podkatalogu folderu z moim main.tex. Użyłem następującej linii, aby załadować pakiet:

\usepackage{sty/prettythesis}

Działa to, ale kompilacja main.tex z xelatex i użycie rubber daje mi ostrzeżenie:

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

Czy istnieje sposób, aby zapobiec temu ostrzeżeniu lub obsłużyć ten przypadek bez konieczności dołączania „sty” do wszystkich komend .sty-files ”ProvidesPackage lub ustawiania zmiennej środowiskowej TEXINPUTS (co wydaje się niemożliwe z samego main.tex) ?

38
Bruno

Wierzę w ten wątek tutaj:

mówi dokładnie o tym samym: wydaje się, że jedynymi alternatywami są albo zmienna środowiskowa TEXINPUTS; lub za pomocą pakietu import . ( uwaga, istnieje wariant w pakiecie import na ... W tym pliki tex pg 3.)

Nieco więcej o TEXINPUTS: 

Mam nadzieję że to pomoże;
Twoje zdrowie! 

EDYCJA: Miałem nadzieję, że można ustawić ścieżkę TEXINPUTS bezpośrednio w pliku tex ( używając \write18 - i zauważ, że niektóre wersje LaTeX używają --enable-write18, mój używa -Shell-escape, aby włączyć \write18; zobacz też this) - ale wydaje się, że nie jest możliwe: 

" ... To nie jest możliwe. ... Zmienna środowiskowa procesu potomnego jest ustawiona, ale nie ma to wpływu na proces nadrzędny (TeX). " ( Re: Ustawianie zmiennej środowiskowej TEXINPUTS w latexie - comp.text.tex ). 

... więc teraz po prostu wywołuję pdflatex w moim Linuxie bash tak: 

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

a następnie rozwiąże bezpośrednio \usepackage{mypackage} w pliku myfile.tex - nawet jeśli mypackage.sty znajduje się w podkatalogu, powiedz ./subdir/mypackage.sty.

15
sdaau

Po prostu wstaw linię poniżej przed wywołaniem pdflatex (lub latex) w swoim makefile lub skrypcie kompilacji:

export TEXINPUTS=".:./sty:"

Następnie odnieś swój pakiet do:

\usepackage{prettythesis}
3
Rudy Matela

Jak odkryłeś, umieszczenie pakietu w podkatalogu (powiedzmy ./sty/prettythesis.sty w odniesieniu do twojego głównego pliku .tex w ./) i wywołanie pakietu przez

\usepackage{sty/prettythesis}

pomyślnie załaduje pakiet, ale wygeneruje ostrzeżenie

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

Jeśli chcesz tylko pozbyć się tego ostrzeżenia i masz niewielkie modyfikacje w pliku .sty, możesz po prostu zmienić nazwę paczki, którą raportuje, zmieniając polecenie \ProvidesPackage na

\ProvidesPackage{sty/prettythesis}

Może to być niewygodne, jeśli zamierzasz przenosić je wokół obciążeń, ale obciążenie modyfikacjami też nie jest takie złe.

Co więcej, jeśli masz konkretną, zmodyfikowaną wersję standardowego pakietu TeX (na przykład ta łatka natbib ), to zmiana nazwy pakietu wyraźnie wskazuje, który pakiet jest dostarczany, i jeśli ponownie użyjesz pliku, to (najprawdopodobniej) ponownie wygeneruje ostrzeżenie, aby poprosić Cię o upewnienie się, że wiesz, co robisz.

0
E.P.