Предисловие
Markdown это прекрасный способ написать небольшую статью, а иногда и достаточно объемный текст, с несложным форматированием в виде курсива и толстого шрифта. Также Markdown неплох для написания статей с включением исходного кода. Но иногда хочется без потерь, танцев с бубном перегнать его в обычный, хорошо оформленный файл PDF, и чтобы не было проблем при конвертации, какие, например были у меня — нельзя писать по русски в комментариях исходного кода, слишком длинные строки не переносятся, а обрезаются и прочие мелкие проблемы. Инструкция позволит быстро настроить конвертер md2pdf не особенно вникая как это работает. Скрипт для более менее автоматической установки ниже в соотвествующем разделе.
Установка TexLive
Разумеется, можно установить только нужные части данного пакета. Но лично мне было откровенно лень искать минимально необходимую рабочую инсталляцию. Чтобы все точно работало, устанавливаем весь пакет TexLive. Он называется texlive-full и весит чуть больше 2х гигабайт, имейте данный факт в виду. Выполняем команду:
user@hostname:~$ sudo apt install texlive-full -y
После достаточно долгой установки можно переходить к следующему пункту.
Установка конвертера Pandoc
Pandoc — пакет Linux, позволяющий преобразовывать некоторые текстовые форматы в другие. В нем много интересных возможностей, с которыми вы можете ознакомится самостоятельно в интернете. Нас же интересует только возможность преобразование markdown файла в PDF. Проверим установлен ли Pandoc и если нет, то установим его. Например так:
user@hostname:~$ dpkg -s pandoc
Если в выводе написано что не установлен — устанавливаем:
user@hostname:~$ sudo apt install pandoc -y
Установка MD2PDF
Можно проследовать на страницу скрипта на GitHub, и дальше действовать по инструкции.
Или скачать архив, распаковать в любую папку, открыть ее в терминале и опять таки следовать инструкциям.
Откройте терминал и выполните:
git clone https://github.com/melichron/md2pdf.git && cd md2pdf
Затем выполните с правами суперпользователя, например:
sudo ./install.sh
Имейте в виду скрипт использует утилиту для построения консольных диалогов whiptail. Если она у вас не установлена, или ставить ее вы не желаете, или хотите все сделать сами, то установите texlive-full и pandoc вручную и действуйте по инструкции дальше.
Установка md2pdf для всех пользователей:
root@host:~/md2pdf# cp ./src/template.tex $(kpsewhich -expand-var='$TEXMFLOCAL')
root@host:~/md2pdf# echo "#!/bin/bash" | tee usr/local/bin/md2pdf
root@host:~/md2pdf# echo "pandoc --output=\$1.pdf --from=markdown_github --latex-engine=pdflatex --listings --template=$(kpsewhich -expand-var='$TEXMFLOCAL')/template.tex \$1" | tee -a usr/local/bin/md2pdf
root@host:~/md2pdf# chmod 755 /usr/local/bin/md2pdf
Установка md2pdf для текущего пользователя:
user@host:~/md2pdf$ cp ./src/template.tex $(kpsewhich -expand-var='$TEXMFHOME')
user@host:~/md2pdf$ echo "#!/bin/bash" | tee ~/.local/bin/md2pdf
user@host:~/md2pdf$ echo "pandoc --output=\$1.pdf --from=markdown_github --latex-engine=pdflatex --listings --template=$(kpsewhich -expand-var='$TEXMFHOME')/template.tex \$1" | tee -a ~/.local/bin/md2pdf
user@host:~/md2pdf$ chmod 755 ~/.local/bin/md2pdf
Использование md2pdf
Просто откройте папку с Markdown файлом (some_file.md) в Терминале, и выполните команду:
user@hostname:~$ md2pdf some_file.md
В результате в папке появится файл some_file.md.pdf.
Заключение
На базе описанного метода можно построить какой угодно стиль PDF файлов, также можно конвертировать вместо md другие форматы, любые поддерживаемые Pandoc. Смею надеятся что однажды это инструкция пригодится 3 с половиной людям.
Комментарии (17)
evocatus
18.03.2019 18:48включает поддержку Microsoft шрифтов, а именно Times New Roman. Такие уж требования к диплому по ГОСТу были
ГОСТ Р 7.0.97-2016
«3.3. Для создания документов необходимо использовать свободно распространяемые бесплатные шрифты.»
Я не в тот ГОСТ смотрю или он наоборот — запрещает использовать Times New Roman? Потому что он не распространяется свободно и он не бесплатный (см. docs.microsoft.com/en-gb/typography/font-list/times-new-roman). Все права на этот шрифт принадлежат The Monotype Corporation и она продаёт его за деньги.melichronsoul Автор
18.03.2019 19:57Что же. Возможно я не так выразился. Не то чтобы по ГОСТу, просто кафедра требовала оформление в терминах Word — шрифт Times, отступы тут полуторные, там двойные и прочие подобные требования. Помню, несколько дней гуглил соответствующие опции для LaTeX. А на днях возникла необходимость сделать PDF из md вот я и поднял диплом из пыльных сетевых хранилищ.
evocatus
18.03.2019 20:50Просто на мой взгляд нужно этому идиотизму сопротивляться — умно, мягко, вежливо уточнять, просить ссылки на нормативные документы, плакаться о нехватке денег на Microsoft Office и пр. Если есть возможность вставать в позу: «не будет Times New Roman и всё», то вставать в позу (но у студента/аспиранта такой возможности, конечно, нет).
OnYourLips
18.03.2019 22:31но у студента/аспиранта такой возможности, конечно, нет
Почему это нет? Заявление завкафу и/или в деканат на самодуров действует крайне отрезвляюще.
Бесправность студентов обычно обусловлена лишь их пассивностью.melichronsoul Автор
19.03.2019 09:38Завкафы и/или деканат одного поля ягоды были. Чем бодаться, проще было сделать как они хотят, плюс как бонус пришло какое никакое понимание LaTeX, GnuPlot и т.д.
domix32
19.03.2019 17:22Так майкрософт уже давненько дает студентом бесплатно версии офиса, студии и кое-каких еще штук.
masai
20.03.2019 15:01Тогда можно плакаться на боль при нумерации формул и работе с библиографией в Office, отсутствии версионирования, съезжающем оформлении и так далее.
domix32
20.03.2019 21:08Из всего только вот с нумерацией формул разве что проблема, а для остального есть режимы правок и щаблоны оформления.
einhander
20.03.2019 17:51+1Зачем pscyr, есть же пакет tempora он часть современных дистрибутивов латеха. Можно использовать xelatex и шрифт PT Serif, он метрически соответствует TMR. Если научрук в теме, то можно его попросить надавить на деканат, что бы они указали конкретные несоответствия, у нас канает любой шрифт с засечками, а замечания деканата касаются расположения названия министерства и университета по строкам.
melichronsoul Автор
21.03.2019 09:48Вы правы, попробовал, критической разницы не увидел, а мороки меньше в разы. Подправлю шаблон. Заодно по неким причинам начало нормально работать копирование с PDF, без
yeaeo?eoeкракозябр
masai
18.03.2019 21:39Копирование в /usr/share или /usr/bin в обход пакетного менеджера — это очень плохая практика, постепенно превращающая систему в помойку. Тем более, без этого можно обойтись.
1) Свой скрипт можно положить в ~/bin/ или ~/.local/bin которые обычно уже добавлены в PATH. Либо можно их туда добавить.
2) template.tex можно положить в ~/.local/share/md2pdf.
3) шрифты надо бы ставить не в общесистемные файлы, а в локальные (TEXMFHOME, путь меняется в настройках).
А ещё лучше — не использовать PSCyr вообще. XeLaTeX прекрасно работает с любыми шрифтами (как для текста, так и для формул).
В крайнем случае можно было задействовать /usr/local/, если очень хочется, чтоб скрипт был виден всем пользователям. А ещё лучше, и это было бы удобнее для пользователей, чем выполнять инструкции по этой статье, было бы собрать deb-пакет.
Немного по поводу bash. Не обязательно выполнять touch. Можно сразу перенаправлять вывод в файл с помощью >. И можно (но не нужно) перенаправлять сразу в файл в системной директории. Просто используйте tee и ставьте sudo перед ним. Тогда копировать не придётся.
Sirikid
18.03.2019 22:33deb-пакет это, конечно, хорошо, но лучше Makefile или просто скрипт, который раскидает файлы по нужным директориям в зависимости от DESTDIR, PREFIX. Так будет легко получить как deb-пакет, так и пакеты для многих source based дистрибутивов (Gentoo, Arch, Crux, Void, ...).
melichronsoul Автор
19.03.2019 09:05Могу быстренько накидать на GitHub скрипт и выложить сюда ссылку. Считаете, это кому нибудь понадобится?
Sirikid
19.03.2019 18:59А давайте, я использовать вряд ли буду, у меня пдфки из орга и так нормально создаются, но может чего поправлю и пришлю PR.
huze
Для интересующихся темой создания PDF из Markdown и LaTeX, советую также посмотреть на github.com/RelaxedJS/ReLaXed — зрелое решение для этих целей.