Недавно я переехал с Subversion на Mercurial. И похоже, что добровольно назад не вернусь :). Я действительно проникся той идеей, что поскольку процесс разработки ПО является сам по себе распределённым процессом, то и система контроля версий должна быть распределённой. И ещё тем, что начало работы с VCS должно быть максимально простым. Это позволяет использовать мощь VCS в любом проекте, не задумываясь, как в случае с централизованными системами, окупятся ли усилия по поднятию и/или созданию репозитория. И ещё... а, ладно, на тему CVCS vs. DVCS написано предостаточно ...
TeX'ом, а точнее XeLaTeX'ом (как LaTeX, только современней: utf8 как стандартная кодировка и возможность использования любых установленных шрифтов) я пользуюсь уже давно, в силу того, что по учёбе нужно писать много курсовых/отчётов, а учусь я на технической специальности. Соответственно, формулы, теоремы, определения... И лучше TeX с этим никто не справляется.
Скажу пару слов о структуре документа, которой я придерживаюсь при работе с TeX, чтобы вам было проще адаптировать предложенные в статье настройки под свои нужды. Для каждого документа создаётся свой каталог. В этом каталоге лежит один главный файл, назовём его мастер-файлом, в котором находится преамбула, и БД BibTeX (точнее, symlink на неё). Разделы документа, включая титул, хранятся в отдельных .tex файлах в подкаталоге sections/
. Иллюстрации хранятся в подкаталог pics/
. Картинки подключаются в файлах разделов, файлы разделов подключаются через \include{}
или \input{}
в мастер-файле.
Итак, у нас возникает естественное желание совместить Mercurial с TeX. Помимо стандартных для VCS возможностей откатить любые изменения и посмотреть продуктивность работы (по истории коммитов), у этого решения есть ещё один жирный плюс: можно создать репозиторий на bitbucket.org и автоматически получить лёгкое резервное копирование. Что-что, а бекап ещё никому мешал. (Да-да, я отношусь к той категории людей, которые уже ;) делают бекапы)
В общем-то, хитростей никаких нет, всё максимально просто и удобно. Единственной загвоздкой является игнорирование в репозитории служебных файлов TeX: всякие там .aux, .log и т.п.
Решение этой проблемы зависит от инструмента, которым компилируется документ. Тут особенно выделяется SCons, который сам знает, что есть мусор в мире TeX, а что нет. То есть, достаточно выполнить clean
(или как там у SCons это называется) перед коммитом. Сам не проверял, но говорят, что работает. Кстати, SCons сам знает, как собирать TeX документ. В других подобных системах, например, GNU Make, схема та же, хотя все действия придётся прописывать вручную.
Если же документ собирается каким-нибудь специализированным TeX-редактором или скриптом, или ещё чем-то, у чего нет волшебного аналога make clean
, можно применить другой подход. А именно: не удалять файлы, а заставить Mercurial игнорировать их. Причём можно обойтись без перечисления всех возможных типов файлов, которые TeX может сгенерировать.
Суть решения состоит в том, что нам надо сказать Mercurial: "Игнорируй всё, кроме *.tex". Ну не совсем-совсем всё, а с небольшими исключениями типа картинок-иллюстраций. И после этого вручную, через hg add
, добавить нужные (исходные) файлы. Этот подход оправдан, так как:
- Исходных файлов значительно меньше, чем сгенерированных TeX'ом.
- Они в большинстве своём подходят под шаблон
*.tex
.
Шаблоны имён, которые следует игнорировать, прописываются в файле .hgignore
в корне репозитория. Документация по этому вопросу доступна [здесь][hgignore-doc], я же приведу сразу свой .hgignore
в качестве примера.
syntax: glob
*~
doc/presentation/*.*
doc/report/*.*
doc/report/sections/*.*
Итак, разберём по порядку, что здесь написано. В корне репозитория есть каталог doc/
, в котором есть 2 каталога для двух TeX документов: doc/report/
и doc/presentation/
. Я говорю Mercurial игнорировать всё в этих каталогах и затем вручную добавляю файлы doc/report/report.tex
и doc/presentation/pres.tex
с помощью hg add
. Больше в этих каталогах ничего ценного нет, только файлы сгенерированные TeX. Может понадобиться дополнительно добавить файл списка источников BibTeX. У меня же пришлось дополнительно выполнить
hg add doc/report/sections/*.tex
чтобы добавить в репозиторий TeX файлы отдельных глав.
Получается не слишком большая плата, буквально 5 минут на настройку, за возможность забыть о необходимости чистить мусор перед коммитом.
Необходимость в такой настройке у меня возникла в связи с одной особенностью AUCTeX (расширение Emacs для редактирования TeX). Заключается она в том, что AUCTeX создаёт служебные файлы для всех *.tex файлов, а не только для мастер-файла, как это происходит, если использовать компилятор TeX вручную. То есть, если вы пишете курсовую и титул у вас лежит в sections/title.tex
, то рядом с ним AUCTeX положит какие-нибудь title.aux
и title.log
. Чтобы их поудалять, надо открыть каждый файл в редакторе и выполнить команду очистки О_о. Хотя может я просто не умею его готовить.
На последок посоветую обратить внимание на AUCTeX. Это очень мощный и удобный инструмент, особенно когда используется вместе с RefTeX, специальным дополнением к Emacs для работы с перекрёстными ссылками, ссылками на литературу и тому подобными вещами в TeX. Связка AUCTeX + RefTeX уделывает какой-нибудь там Texmaker также, как Texmaker уделывает блокнот.
Комментариев нет:
Отправить комментарий