Предисловие


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)


  1. huze
    18.03.2019 18:06

    Для интересующихся темой создания PDF из Markdown и LaTeX, советую также посмотреть на github.com/RelaxedJS/ReLaXed — зрелое решение для этих целей.


  1. 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 и она продаёт его за деньги.


    1. melichronsoul Автор
      18.03.2019 19:57

      Что же. Возможно я не так выразился. Не то чтобы по ГОСТу, просто кафедра требовала оформление в терминах Word — шрифт Times, отступы тут полуторные, там двойные и прочие подобные требования. Помню, несколько дней гуглил соответствующие опции для LaTeX. А на днях возникла необходимость сделать PDF из md вот я и поднял диплом из пыльных сетевых хранилищ.


      1. evocatus
        18.03.2019 20:50

        Просто на мой взгляд нужно этому идиотизму сопротивляться — умно, мягко, вежливо уточнять, просить ссылки на нормативные документы, плакаться о нехватке денег на Microsoft Office и пр. Если есть возможность вставать в позу: «не будет Times New Roman и всё», то вставать в позу (но у студента/аспиранта такой возможности, конечно, нет).


        1. OnYourLips
          18.03.2019 22:31

          но у студента/аспиранта такой возможности, конечно, нет

          Почему это нет? Заявление завкафу и/или в деканат на самодуров действует крайне отрезвляюще.
          Бесправность студентов обычно обусловлена лишь их пассивностью.


          1. melichronsoul Автор
            19.03.2019 09:38

            Завкафы и/или деканат одного поля ягоды были. Чем бодаться, проще было сделать как они хотят, плюс как бонус пришло какое никакое понимание LaTeX, GnuPlot и т.д.


        1. domix32
          19.03.2019 17:22

          Так майкрософт уже давненько дает студентом бесплатно версии офиса, студии и кое-каких еще штук.


          1. masai
            20.03.2019 15:01

            Тогда можно плакаться на боль при нумерации формул и работе с библиографией в Office, отсутствии версионирования, съезжающем оформлении и так далее.


            1. domix32
              20.03.2019 21:08

              Из всего только вот с нумерацией формул разве что проблема, а для остального есть режимы правок и щаблоны оформления.


      1. einhander
        20.03.2019 17:51
        +1

        Зачем pscyr, есть же пакет tempora он часть современных дистрибутивов латеха. Можно использовать xelatex и шрифт PT Serif, он метрически соответствует TMR. Если научрук в теме, то можно его попросить надавить на деканат, что бы они указали конкретные несоответствия, у нас канает любой шрифт с засечками, а замечания деканата касаются расположения названия министерства и университета по строкам.


        1. melichronsoul Автор
          21.03.2019 09:48

          Вы правы, попробовал, критической разницы не увидел, а мороки меньше в разы. Подправлю шаблон. Заодно по неким причинам начало нормально работать копирование с PDF, без yeaeo?eoe кракозябр


  1. 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 перед ним. Тогда копировать не придётся.


    1. Sirikid
      18.03.2019 22:33

      deb-пакет это, конечно, хорошо, но лучше Makefile или просто скрипт, который раскидает файлы по нужным директориям в зависимости от DESTDIR, PREFIX. Так будет легко получить как deb-пакет, так и пакеты для многих source based дистрибутивов (Gentoo, Arch, Crux, Void, ...).


      1. melichronsoul Автор
        19.03.2019 09:05

        Могу быстренько накидать на GitHub скрипт и выложить сюда ссылку. Считаете, это кому нибудь понадобится?


        1. aakhamef
          19.03.2019 18:35

          Да. Мне, например.


        1. Sirikid
          19.03.2019 18:59

          А давайте, я использовать вряд ли буду, у меня пдфки из орга и так нормально создаются, но может чего поправлю и пришлю PR.


        1. Sirikid
          21.03.2019 16:05

          Я посмотрел что внутри и изменил свое мнение, никому это не понадобится.