Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Makefile #42

Closed
ulysses4ever opened this issue Jul 27, 2015 · 27 comments
Closed

Makefile #42

ulysses4ever opened this issue Jul 27, 2015 · 27 comments

Comments

@ulysses4ever
Copy link
Contributor

В Ридми даны команды сборки:

latexmk -pdf -pdflatex="xelatex %O %S" dissertation
latexmk -pdf -pdflatex="xelatex %O %S" synopsis

Не хотите ли вы добавить Makefile? Я могу сделать пулл-реквест, если вы одобряете идею.

@AndreyAkinshin
Copy link
Owner

Идею одобряю, буду рад пулл-реквесту. Только такая просьба: команды сборки в README оставьте, а в дополнение припишите, что Makefile лежит там-то.

@ulysses4ever
Copy link
Contributor Author

Замечательно, спасибо.

@ulysses4ever
Copy link
Contributor Author

Добавлено #46.

@Lenchik
Copy link
Collaborator

Lenchik commented Aug 9, 2015

https://github.com/olegrog/my_phd_thesis/blob/master/Dissertation/Makefile
Положу сюда эту ссылку — может быть будет полезно, если кто-то соберётся дорабатывать makefile.

@ulysses4ever
Copy link
Contributor Author

Ссылка для тех, кто не слыхал про latexmk ;)

@Lenchik
Copy link
Collaborator

Lenchik commented Aug 10, 2015

А можете сделать такой вариант, чтобы сразу собирал в трёх компиляторах и метил вида disertation_pdflatex.pdf, dissertation_xelatex.pdf, dissertation_lualatex.pdf и с synopsis так же?
По-хорошему, нужно и для Presentation makefile.

Кстати, он biber'ом может обрабатывать в случае использования опции biblatex?

@ulysses4ever
Copy link
Contributor Author

Что-то я не могу разобраться, как указать имя выходного файла для latexmk.

Если что, принцип make простой: вы после all: в каждой следующей строке, начинающейся со знака табуляции, пишете команду — при вызове make они все выполнятся. Так что там по идее просто добавить по две копии строки, которая уже есть с latexmk, и поменять в копиях pdflatex на xelatex/luatex.

@ulysses4ever
Copy link
Contributor Author

В общем, примерно так должно быть:

all:
    latexmk -pdf -jobname='dissertation_pdflatex' -ps- -dvi- -recorder -silent dissertation.tex
    latexmk -xelatex -jobname='dissertation_xelatex' -ps- -dvi- -recorder -silent dissertation.tex 
    latexmk -laulatex -jobname='dissertation_laulatex' -ps- -dvi- -recorder -silent dissertation.tex 

Важно только, что перед командами должен быть знак табуляции, а не пробелы: кажется ГитХаб заменяет табы на пробелы.

Опции silent и recorder опциональны :)

  • silent выключает вывод, что ускоряет процесс сборки.
  • recorder создаёт ещё один вспомогательный файл, который помогате latexmk экономить на перезапусках.

-ps- и -dvi- на всякий случай: явно говорим, что они нам не нужны.

На самом деле, вы хотите довольно странного. Когда работаешь с большим документом, основная проблема — медленная сборка. С тремя запусками будет ещё медленней. Я вот наоборот ищу возможности ускорять.

Ещё есть хорошая опция auxdir (отдельный каталог для вспомогательных файлов), но у меня почему-то выдаёт ошибку про слишком много запусков pdflatex, если её включить :(

@ulysses4ever
Copy link
Contributor Author

С auxdir разобрался: она реализована только для MiKTeX.

@dustalov
Copy link
Contributor

Отлично. Осталось придумать практическое применение одновременной сборке шаблона в трёх разных компиляторах.

@ulysses4ever
Copy link
Contributor Author

Дааа, тому, кто придумает, можно выдать приз за изобретательность! Хотя лучше было бы подумать над механизмом раздельной сборки глав (и рисунков), чтобы ускорить общее время сборки.

@dustalov
Copy link
Contributor

Возможно, было бы лучше что-то подобное.

# Please change it here unless you are OK with `pdflatex`.
all: pdflatex
pdflatex:
    latexmk -pdf -jobname='dissertation_pdflatex' -ps- -dvi- -recorder -silent dissertation.tex
xelatex:
    latexmk -xelatex -jobname='dissertation_xelatex' -ps- -dvi- -recorder -silent dissertation.tex 
lualatex:
    latexmk -lualatex -jobname='dissertation_laulatex' -ps- -dvi- -recorder -silent dissertation.tex 

@timtonk
Copy link
Contributor

timtonk commented Aug 10, 2015

Отлично. Осталось придумать практическое применение одновременной сборке шаблона в трёх разных компиляторах.

Возможно, это нужно для того, чтобы иметь в репе демонстрационные документы разных сборок. А для этого не вводить каждый раз эти команды, а разок вызвать latexmk.

@dustalov
Copy link
Contributor

Это было бы очень удобно, но git создан не для того, чтобы хранить в нём часто изменяемые стокилобайтовые блобы. Для этого нужно что-то другое (см. Large File Storage).

@ulysses4ever
Copy link
Contributor Author

Мне кажется, я уже писал где-то: у ГитХаба есть интеграция с ShareLatex, чтобы не хранить pdf в репе. В ридми просто делается ссылка на шарелатех. Единственное: там нужно руками пересобирать (нажимать кнопочку билд в шарелатехе).

@ulysses4ever
Copy link
Contributor Author

Оффтоп: я бы также вынес файлы с гостами куда-то (дропбокс?) и добавил ссылку, скажем, в тот же ридми.

@timtonk
Copy link
Contributor

timtonk commented Aug 10, 2015

Sharelatex в бесплатной редакции вроде не подходит под этот проект. А за остальные платить никто не будет.

@ulysses4ever
Copy link
Contributor Author

Что значит, не подходит под этот проект? Меня как-то пытались убедить, что для этого требуются деньги: это получилось бы, если бы я сам не делал интеграцию для своих проектов совершенно бесплатно. Пример тут с ссылкой из ридми в шарелатех.

@timtonk
Copy link
Contributor

timtonk commented Aug 10, 2015

Это значит, что за бесплатно кто-то один должен будет поддерживать проект в шарелатехе и жать волшебную кнопку билд. А тут как минимум двое могут вносить изменения в репу.
И что потом делать, если @Lenchik сейчас создаст там проект, а потом забьёт по неизвестным нам причинам? Про автобусный фактор я вообще молчу.

@ulysses4ever
Copy link
Contributor Author

Кажется, там билд уже автоматический. Во всяком случае, ничто не мешает попробовать, сохраняя блобы в репе, если они уж так вам дороги по каким-то причинам.

@AndreyAkinshin
Copy link
Owner

По поводу собранных документов: если есть возможность сделать автоматический билд с помощью внешнего сервиса, то я за, это было бы очень удобно. Вроде бы ShareLaTeX это умеет: https://www.sharelatex.com/github/ (Поддерживаются pdflatex, lualatex, xelatex).
По поводу файлов ГОСТ-ов: не вижу причин переносить их куда-то из репы. Они занимают всего 1 мегабайт и никому не мешают. Зато для конечного пользователя дополнительное удобство: скачал репу — и все нужные ГОСТы уже у тебя, не нужно ещё куда-то лезть.

@Lenchik
Copy link
Collaborator

Lenchik commented Aug 11, 2015

@ulysses4ever Спасибо
Я думаю в репозиторий кинуть ещё bat/cmd для пользователей Windows, у которых make нет, а latexmk из дистрибутивов ТеХа есть.
Да, три версии ради демонстрации. Да и для отладки удобно.

@dustalov
Ключ all он вообще как работает? Это как некоторое условие на вызов из внешнего файла (как в репозитории make верхнего уровня)?

@ulysses4ever Если текст внутри глав ссылается на что-то внешнее по отношению к ним? На текст приложений, формулы и рисунки в других главах. Я думаю, что в этом случае поглавная сборка даст сбой. А рисунки из tikz в отдельных внешних файлах можно автоматизировать до pdf и pdf в итоговый документ подключать.
С другой стороны, внедрить в файлы спеиальные команды или комментарии, или всю структуру переделать, чтобы можно было на выходе, при обработке всех исходных файлов, получать только конкретную главу (с правильными ссылками, соответственно) или даже комбинации --- тоже интересный вариант. Или даже комбинации --- «О, великий latexmk, дай мне главу 1, главу 3, приложения и список литературы!»

@AndreyAkinshin Автоматический билд заманчивая идея, но там же лучше заводить какой-нибудь открытый sharelatex аккаунт/репозиторий, чтобы в нём они складировались и были всем доступны. А @tonkonogov правильно заметил, что в долгосрочной перспективе это может быть ненадёжно. Там те ребята, что внесли его в темплейты не предоставляют ли опции автоматической компиляции демонстрационных примеров? И кстати, там же не автоматическая закачка свежей версии шаблона с гитхаба, так ведь?

@AndreyAkinshin
Copy link
Owner

@Lenchik, я ребятам из ShareLaTeX несколько часов назад письмо написал по поводу синхронизации с GitHub-ом, посмотрим, что ответят.
По дефолту автоматической закачки нет, но в прошлый раз я выпросил доступ к шаблону: могу его обновлять, но только руками. В текущем варианте синхронизация с гитхабом — платная фича, надо 15$ в месяц платить.

@dustalov
Copy link
Contributor

@Lenchik имя задаётся произвольно. Можно all, можно default, как угодно. make выполняет сборку первой объявленной цели, если она не задана явным образом: либо в командной строке (make xelatex), либо при помощи .PHONY в GNU make.

@AndreyAkinshin
Copy link
Owner

Ребята из ShareLaTeX ответили, что бесплатно нам синхронизацию делать никто не будет: шаблон будет обновляться только руками или по запросу.

@Lenchik
Copy link
Collaborator

Lenchik commented Aug 13, 2015

@ulysses4ever если подключить главы через \include, то не ускорится, случайно?

@ulysses4ever
Copy link
Contributor Author

Я читал несколько рецептов, нигде такого не было. Сам не экспериментировал. Единственное, во что я верю (тоже вычитал), что tikz сильно замедляет сборку.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants