Подтвердить что ты не робот

Как загрузить файлы латекса .sty из подкаталога?

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

\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 (что кажется невозможным из основного. текс)?

4b9b3361

Ответ 1

Я верю в эту тему:

говорит об одном и том же: поэтому, кажется, единственные альтернативы либо используют переменную среды TEXINPUTS; или используя пакет импорта. (обратите внимание: в пакете import есть вариант ... Включая файлы tex pg 3.)

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

Надеюсь, что это поможет,
Ура!

 

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

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

... Итак, теперь я просто вызываю pdflatex в свой Linux bash следующим образом:

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

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

Ответ 2

Просто поставьте строку ниже перед вызовом pdflatex (или латексом) в файле makefile или создайте script:

export TEXINPUTS=".:./sty:"

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

\usepackage{prettythesis}

Ответ 3

Как вы обнаружили, помещение пакета в подкаталог (например, ./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 (например, этот патч natbib), тогда изменение имени пакета четко указывает, какой пакет он предоставляет, и если вы повторно используете файл, то он (скорее всего) повторно поднимет предупреждение, чтобы побудить вас убедиться, что вы знаете, что делаете.