Как загрузить латексные .sty файлы из подкаталога? - PullRequest
42 голосов
/ 14 октября 2010

Я использую некоторые .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 \» во все команды .sty-files \ ProvidesPackage или устанавливать переменную окружения TEXINPUTS (что, по-видимому, невозможно из основного. сам текст)?

Ответы [ 3 ]

18 голосов
/ 19 декабря 2010

Мне кажется, что эта тема здесь:

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

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

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

РЕДАКТИРОВАТЬ: Я надеялся, что можно установить путь TEXINPUTS непосредственно в текстовом файле ( с помощью \write18 - и обратите внимание, что некоторые версии LaTeX используют --enable-write18Мой использует -shell-escape для включения \write18; см. также this ) - но, похоже, это невозможно:

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

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

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

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

4 голосов
/ 25 февраля 2014

Просто поместите строку ниже перед вызовом pdflatex (или latex) в вашем make-файле или скрипте сборки:

export TEXINPUTS=".:./sty:"

Затем укажите ваш пакет как:

\usepackage{prettythesis}
1 голос
/ 23 августа 2016

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

...