Как загрузить файлы latex .sty из подкаталога?
Вопрос
Я использую некоторые файлы .sty, которые не являются частью texlive, и хочу разместить их в подкаталоге папки с моим main.tex.Для загрузки пакета я использовал следующую строку:
\usepackage{sty/prettythesis}
Это работает, но компиляция main.tex с помощью xelatex и использование резина дает мне предупреждение:
sty/prettythesis.sty: You have requested package `sty/prettythesis',
but the package provides `prettythesis'. (page 1)
Есть ли способ предотвратить это предупреждение или обработать этот случай без необходимости включать «sty» во все команды \ProvidesPackage .sty-files или устанавливать переменную среды TEXINPUTS (что, похоже, невозможно из самого main.tex) ?
Решение
Я верю вот этой теме:
говорит примерно о том же:так что кажется, что единственными альтернативами являются либо использование TEXINPUTS
переменная среды;или с помощью импортный пакет. (обратите внимание, есть вариант import
пакет на ...Включая текстовые файлы, стр. 3.)
Еще немного о TEXINPUTS:
- Часто задаваемые вопросы по TeX — «Временная» установка файлов (La)TeX
- Установка путей к переменным среды TeX
- Переменные среды для запуска LaTeX
- TeX (и его вариации) для написания математики - math.umn.edu (см. «Входы TeX»)
- Установка пакетов LaTeX — пути поиска TeX
Надеюсь это поможет;
Ваше здоровье!
РЕДАКТИРОВАТЬ:Я надеялся, что можно будет установить путь TEXINPUTS непосредственно в tex-файле (используя \write18
-- и обратите внимание, что некоторые версии LaTeX используют --enable-write18
, мой использует -shell-escape
включить \write18
;смотрите также этот) - но кажется это невозможно:
"...Это невозможно....Переменная среды дочернего процесса установлена, но это не влияет на его родительский процесс (TeX)." (Ре:Установка переменной среды TEXINPUTS внутри latex — comp.text.tex).
...итак, сейчас я просто позвоню pdflatex
в моем линуксе bash
так:
TEXINPUTS=.//:$TEXINPUTS pdflatex ./myfile.tex
и тогда это разрешится напрямую \usepackage{mypackage}
в myfile.tex
файл - даже если mypackage.sty
находится в подкаталоге, скажем ./subdir/mypackage.sty
.
Другие советы
Просто положите строку ниже перед вызовом PDFLATEX (или LATEX) в вашем сценарии Makefile или Build:
export TEXINPUTS=".:./sty:"
Затем ссылайся на ваш пакет как:
\usepackage{prettythesis}
Как вы обнаружены, положить пакет в подкаталог (скажем, ./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), затем изменение имени пакета четко указывает, какой пакет он предоставляет, и если вы повторно используете файл, то он будет (скорее всего) повторно поднять предупреждение, чтобы подсказать вас, чтобы убедиться, что вы знаете, что вы делаете.