Включить *.sty файл из супер/подкаталога основного файла *.tex
Я хочу поделиться латексным документом через git со многими другими людьми.
Поэтому мы решили поместить все специальные файлы стилей, которые не присутствуют в каждой латексной установке, в каталог ресурсов. Было бы здорово, если бы этот дир был супердиром. фактического рабочего каталога
Как я могу импортировать эти файлы стилей?
Важно, чтобы даже отношения этих удаленных стилей были разрешены с помощью других удаленных стилей.
Ответы
Ответ 1
Вы можете импортировать файл стиля (mystyle.sty
) в свой документ двумя способами:
- Если у вас есть это на вашем пути или в той же папке, что и файл
.tex
, просто включите эту строку в свою преамбулу: \usepackage{mystyle}
- Если у вас есть это в другой папке, вы можете получить доступ, используя свой полный путь как
\usepackage{/path/to/folder/mystyle}
Тем не менее, если вы не уверены, что файл стиля находится в каждой установке, просто включите его в тот же каталог и убедитесь, что вы выполняете git add mystyle.sty
и отслеживаете его вместе с остальными вашими файлами (хотя, скорее всего, изменений в нем не будет). Нет необходимости в родительском каталоге. Но если вы настаиваете на другом каталоге, см. Вариант 2 выше.
Было бы лучше, если бы это было в подкаталоге, чем в родительском каталоге, поскольку вы все равно можете вызвать файл как \usepackage{subdir/mystyle}
и быть уверенным, что вы вызываете свой файл стиля. Однако, если вы выходите в родительский каталог, вы никогда не знаете, есть ли у других пользователей аналогичная папка, которая не является частью вашего пакета, что может привести к ошибкам.
Ответ 2
Это, вероятно, уже не относится к вам, но вот еще один способ сделать то, что вы хотите.
Настройте репозиторий git следующим образом:
mystyle.sty
project/
makefile
project.tex
и поместите \usepackage{mystyle}
в преамбулу project.tex
.
Компиляция project.tex
вручную не будет работать, конечно, потому что mystyle.sty
не находится в том же каталоге, что и project.tex
.
Однако, если makefile
содержит что-то по строкам:
project.pdf: mystyle.sty project.tex
pdflatex project
mystyle.sty: ../mystyle.sty
cp ../[email protected] [email protected]
тогда запуск make
из каталога project
приведет к тому, что mystyle.sty
будет скопирован в нужное место до того, как project.tex
будет (это время успешно) скомпилировано.
Этот способ может показаться немного выше, но он сочетает в себе лучшие функции других методов.
- Если для нескольких проектов в одном репозитории требуется
mystyle.sty
, то наличие общего mystyle.sty
, сидящего над ними, имеет больше смысла, чем наличие копии в каждом каталоге проекта; все эти копии должны быть сохранены.
- Компиляция переносима в том смысле, что если вы предоставили мне свои копии
mystyle.sty
и project.tex
, я бы (по крайней мере теоретически) мог бы скомпилировать вручную без необходимости изменять файлы, которые вы мне дали.
Например, мне не нужно было бы заменять \usepackage{/your/path/mystyle}
на \usepackage{/my/path/mystyle}
.
Ответ 3
Вы можете использовать Makefiles, как было предложено выше. Другой вариант - CMake. Я не тестировал родительские каталоги.
Если у вас есть следующая структура файла:
├── CMakeLists.txt
├── cmake
│ └── UseLATEX.cmake
├── img
│ └── logo.jpg
├── lib
│ └── framed.sty
└── main.tex
-
у вас должен быть установлен CMake, инструкции Ресурсы CMake
-
UseLATEX.cmake можно загрузить с здесь
-
затем внутри CMakeLists.txt
╚═$ cat CMakeLists.txt
cmake_minimum_required (VERSION 2.6)
set(PROJECT_NAME_STR myProject)
project(${PROJECT_NAME_STR})
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(UseLATEX)
ADD_LATEX_DOCUMENT(main.tex
IMAGE_DIRS img
DEFAULT_PDF
MANGLE_TARGET_NAMES)
-
Некоторое содержимое примера для main.tex(обратите внимание на изображение)
╚═$ cat main.tex
\documentclass{report}
\begin{document}
\begin{center}
\includegraphics[width=300px]{img/logo.jpg}
\end{center}
\end{document}
-
Каталог lib имеет файлы *.sty
-
Теперь вы можете скомпилировать:
cd /directory/that/has/CMakeLists.txt/
mkdir build
cd build
cmake ..
make
-
вы можете просмотреть файл main.pdf, который находится в каталоге сборки.
Ответ 4
Когда вы используете дистрибутив TeX, который использует kpathsea, вы можете использовать переменную среды TEXINPUTS
, чтобы указать, где TeX ищет файлы. Переменная должна использоваться следующим образом.
Пути в TEXINPUTS
разделены :
. Пустой путь будет включать в себя пути поиска по умолчанию, т.е. только двоеточие. Два слеша подряд означают, что поиск в каталоге и во всех подкаталогах.
Таким образом, например, для создания файла document.pdf
, который использует файлы в текущем каталоге, во всех подкаталогах каталога resources
и в каталогах по умолчанию, вы можете использовать следующий Makefile.
document.pdf: document.tex
TEXINPUTS=.:./resources//: pdflatex document.tex
Чтобы ускорить поиск по имени файла, вы можете создать базу данных ls-R
с помощью команды mktexlsr
.
Чтобы узнать все подробности о kpathsea, ознакомьтесь с руководством.