2010-10-14 2 views
36

Я использую некоторые .sty-файлы, которые не являются частью texlive и хотят иметь их в подкаталоге папки с моим main.tex. Я использовал следующую строку, чтобы загрузить пакет:Как загрузить файлы латекса .sty из подкаталога?

\usepackage{sty/prettythesis} 

Это работает, но компиляции main.tex с xelatex и использование rubber дает мне предупреждение:

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

Есть ли способ, чтобы предотвратить это предупреждать или обрабатывать этот случай без необходимости включать «стиль» во всех командах .sty-files '\ ProvidesPackage или установить переменную среды TEXINPUTS (что, кажется, не возможно из самого main.tex)?

ответ

13

Я считаю, что эту тему здесь:

говорит о точно то же самое: так что, похоже, единственные альтернативы, либо с помощью TEXINPUTS переменной среды; или с использованием import package. (примечание, есть вариант на import пакет на ...Including tex files pg 3.)

немного больше о TEXINPUTS:

Надеюсь, это поможет;
Приветствия!

 

EDIT: Я надеялся, что один может задать путь TEXINPUTS непосредственно в файле текс (с помощью \write18 - и к сведению, что некоторые версии LaTeX использовать --enable-write18, шахта использует -shell-escape для включения \write18; см также this) - но мне кажется, это не представляется возможным:

"... Это невозможно ... переменная среды дочернего процесса устанавливается, но это не сказывается. к его родительскому процессу (TeX). "(Re: Setting the environmental variable TEXINPUTS within latex - comp.text.tex)

...так, теперь я просто называю pdflatex в моем Linux bash так:

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

, а затем он будет решать непосредственно \usepackage{mypackage} в файле myfile.tex - даже если mypackage.sty находится в подкаталоге, скажем ./subdir/mypackage.sty.

2

Проще говоря строку ниже перед вызовом pdflatex (или латекса) в вашем Makefile или скрипт сборки:

export TEXINPUTS=".:./sty:" 

Затем укажите свой пакет как:

\usepackage{prettythesis} 
+1

Выполнение этого не позволяет найти другие пакеты в моем случае. Как узнать, какие каталоги по умолчанию также добавить к переменной среды? – gigabytes

+1

Согласно официальной документации, он должен найти системные пакеты. («man pdftex» в моей системе так говорит). Разве вам не хватает финальной толстой кишки («:»)? –

+0

Да, это была ошибка – gigabytes

0

Как вы обнаружили, поставив пакета в подкаталоге (скажем, ./sty/prettythesis.sty в отношении вашего основного .tex файла по адресу ./), и вызов пакета через

\usepackage{sty/prettythesis} 

успешно загрузить пакет, но он будет производить предупреждение

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

Если все, что вы хотите, чтобы избавиться от этого предупреждения, и вы все в порядке с незначительными изменениями в файле .sty , то вы можете просто изменить имя пакета, который он сообщает, изменив команду \ProvidesPackage к

\ProvidesPackage{sty/prettythesis} 

Это может быть неудобно, если вы собираетесь перемещать его по нагрузкам, но также не так уж плохо.

Еще лучше, если у вас есть конкретная модифицированная версия стандартного пакета TeX (например, this patch of natbib), то изменение названия пакета четко указывает, какой пакет он предоставляет, и если вы повторно используете файл, то он (скорее всего) повторно поднимет предупреждение, чтобы побудить вас убедиться, что вы знаете, что делаете.

Смежные вопросы