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