Данный пост будет интересен для студентов и ученых, которых утомил Microsoft Word.
Осень - самая прекрасная пора для научно-исследовательских работ. Значит самое время обновить свой подход к написанию научных статей. В последнее время для хранения, управления, коллаборации и прочей работы с исходными кодами я стал использовать gitlab.com.
Первый плюс использования gitlab для научной работы состоит в том, что у вас появляется единая точка для синхронизации с коллегами, а если вы пишете один - резервная копия с историей.
Второй плюс состоит в едином списке задач в виде Issue tracker’а. Могут быть назначены исполнители, сроки, проведены обсуждения. Также прямо в интерфейсе можно разбренчиваться - удобно даже для непосвященных.
Третий плюс, ради которого затевался данный пост, состоит в непрерывной интеграции. При каждом коммите (фиксированной версии рабочей директории), отправленном на сервер gitlab можно запустить команды для сборки проекта. Для программных продуктов собирается, тестируется и выкладывается дистрибутив продукта. Тоже самое доступно и для LaTeX проекта. Можно собрать проект и получить готовый pdf даже не имея полностью установленного LaTeX стека.
При создании непрерывной интеграции создатели gitlab вдохновлялись сервисом travis-ci.org. Соответственно, вся настройка репозитория производится в файле .gitlab-ci.yml. После коммита gitlab runner скачивает этот файл к себе и выполняет описанные в нем действия. Gitlab runner - это программа, которая управляет машиной, на которой происходит сборка. Gitlab имеет партнерское соглашение с Digital Ocean, что позволяет на каждый проект иметь бесплатный runner. Также в качестве runner’а можно зарегистрировать свою машину. Подробности можно узнать в документации (на английском).
Итак, у нас есть в корне репозитория LaTeX-документ с названием report.tex. Остальные части документа импортируются внутри report.tex и также расположены в корне. Для настройки непрерывной интеграции создадим следующий файл:
image: blang/latex
stages:
- build
latex_build_job:
stage: build
script:
- pdflatex report.tex && pdflatex report.tex
tags:
- docker
artifacts:
paths:
- report.pdf
При каждом новом коммите, попавшем в gitlab репозиторий будет происходить следующее:
1. Runner запускает Docker-образ с latex
2. В рабочую директорию клонирует репозиторий со статьей
3. Запускает pdflatex два раза (второй раз нужен для корректного отображения BibTeX’a)
4.При наличии файла report.pdf помечает билд успешным и выгружает этот файл как артефакт сборки.
После этого вы можете скачать этот файл и убедится, что новые изменения как-то повлияли на статью.