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

Включить *.sty файл из супер/подкаталога основного файла *.tex

Я хочу поделиться латексным документом через git со многими другими людьми. Поэтому мы решили поместить все специальные файлы стилей, которые не присутствуют в каждой латексной установке, в каталог ресурсов. Было бы здорово, если бы этот дир был супердиром. фактического рабочего каталога Как я могу импортировать эти файлы стилей?

Важно, чтобы даже отношения этих удаленных стилей были разрешены с помощью других удаленных стилей.

4b9b3361

Ответ 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, ознакомьтесь с руководством.