Автоматическое создание и печать PDF-файлов из Markdown?

Я ищу способ, чтобы мой компьютер автоматически генерировал и печатал PDF-файлы из папки, полной файлов уценки.

Итак, каждое утро в 5 утра я хочу, чтобы мой компьютер просматривал мою папку /markdown-files, создавал кучу PDF-файлов для перехода в папку /PDF, а также запускал принтер, чтобы страницы ждали меня.

Есть несколько требований, которые могут сделать это немного сложнее:

  1. PDF-файлы должны иметь название файла в верхней части каждой страницы.
  2. Страница должна быть формата А4
  3. Строки должны быть разделены как минимум двойным интервалом.

Раньше я использовал WKPDF для создания PDF-файлов, но он больше не работает на Yosemite.

Ответы (4)

Вы можете сделать это с помощью Markdown.pl и htmldoc(1), которые можно установить вместе с Homebrew . Основной процесс создания PDF-файла:

markdown foo.markdown | htmldoc --no-toc --no-title -f foo.pdf -

Что касается вашего имени файла на странице, вы можете включить эхо, чтобы добавить его как элемент HTML:

echo $(markdown foo.markdown) "<p>foo</p>" | htmldoc --no-toc --no-title -f foo.pdf -

А для печати команда lpr(1) отправит файл на принтер по умолчанию.

Связывая это полностью:

for filename in `ls *.markdown`;
do
    echo $(markdown "$filename") "<p>$filename</p>" | 
        htmldoc --no-toc --no-title -f "${filename}.pdf" -
    lpr "${filename}.pdf"
done
Спасибо за вашу помощь. Я играл с htmldoc и вижу, как заставить его делать то, что я хочу, но вы должны меня простить, потому что я не уверен, куда поместить этот фрагмент кода, чтобы он действительно запускался в определенное время. .
Редактировать: Хейзел на помощь!
Большой! Я бы предложил cronjob, но Хейзел гораздо дружелюбнее.
Есть еще одна проблема: этот цикл просто печатает первый файл снова и снова, а не все файлы один раз. для имени файла в ls *.md; do echo $(markdown $filename) "<p>$filename</p>" | htmldoc --no-toc --no-title --fontspacing 3 --size a4 -f ${имя файла}.pdf -lpr ${имя файла}.pdf готово
Думаю, я только что понял, что это моя собственная глупая ошибка в том, что в моих именах файлов есть трубы.
Эта оценка вашего выбора символа имени файла верна.
Я вижу, что проблема все еще существует: вместо создания и печати «мое имя файла.pdf» он пытается сделать «мой.pdf» и «имя файла.pdf».
Поместите двойные кавычки везде $filename, где он используется в качестве аргумента команды, чтобы преодолеть это. Затем он также должен работать с трубами в имени.
Разве этот ответ не является примером того, что «вы никогда не должны анализировать lsвывод» ? Так что вместо `ls *.markdown`должно быть просто *.markdownглобусом *). PS Кроме того, лучше использовать $(command)вместо обратных кавычек `command`.
Попытка установить html doc на el capitan дает: htmldoc: эта формула либо не компилируется, либо работает должным образом в версиях OS X, более новых, чем Yosemite, из-за несовместимости с исходным кодом. Ошибка: неудовлетворенное требование привело к сбою этой сборки.
@CGPGrey Да, построить его из исходного кода (левая боковая панель) не удается… но изменение одной строки заставляет его работать. В строке 1385 приведите этот 0 к логическому значению: cinfo.quantize_colors = (boolean)0;. Затем с помощью ./configure && makeон создает и запускает для меня (программа вывода - htmldoc/htmldoc)

Вот решение, которое использует LaTeX для создания PDF. Если у вас есть длинный текст в файлах Markdown и вы хотите оптимизировать его для типографской удобочитаемости (и я подозреваю, что вы это делаете), LaTeX, как правило, выполняет гораздо лучшую работу по сравнению с механизмами HTML.

Он используется pandocв качестве посредника между Markdown и LaTeX, а также создает PDF для вас.

Основной сценарий

#!/bin/bash

md-dir="MARKDOWN_DIRECTORY_HERE"
pdf-dir="PDF_DIRECTORY_HERE"

cd "${md-dir}"
for filename in *.md; do
    target-pdf="${pdf-dir}/${filename}.pdf"
    pandoc "${filename}" -t latex --latex-engine=xelatex -V geometry=a4paper -V fontsize=11pt -V listings -V header-includes="\usepackage{fancyhdr}\pagestyle{fancyplain}\cfoot{}\rhead{\thepage}\lhead{\texttt{\lstinline/${filename}/}}" -V header-includes="\linespread{2.0}" -o "${target-pdf}"
    echo "produced ${filename}.pdf"
    lpr "${target-pdf}"
done

Требуемая настройка

  1. Получить pandocот доморощенного:brew install pandoc
  2. Установите минимальную версию LaTeX под названием BasicTeX.

Проверка правильности настройки

Вы должны иметь возможность работать в новом окне терминала (с bash)

echo "test" | pandoc -t latex --latex-engine=xelatex -o test.pdf

и получить действующий test.pdfдокумент со словом "тест"

Настройки

Вы можете многое изменить с помощью настроек LaTeX из командной строки.

  1. настроить межстрочный интервал, изменив \linespread{2.0}множитель
  2. скорректировать маркировку, заменив geometry=a4paperнаgeometry=a4paper,left=XXmm,right=XXmm,top=XXmm,bottom=XXmm
  3. измените размер шрифта, привязав его 11ptк 10pt или 12pt, и все должно масштабироваться соответствующим образом.
  4. измените основной шрифт, добавив еще один аргумент к pandoc: -V mainfont="NAME OF FONT". Вы также можете установить monofontэтот способ.
Было бы удобнее обслуживать только \input{my-template-file}из командной строки.
Очень интересно. Поиграюсь с вариантом. Спасибо.
Запуск теста дает: «pandoc: xelatex не найден. xelatex необходим для вывода в формате PDF».
Просто хочу убедиться: это после установки пакета BasicTeX, как описано выше, верно? Можете ли вы нормально запустить «xelatex» или «pdflatex» с терминала?

Я не использовал WKPDF, но его автор предлагает метод, с помощью которого его можно заставить работать в Yosemite: https://github.com/plessl/wkpdf/wiki/How-to-install-on-MacOS-10.10-Yosemite .

RVM: команда не найдена.

Вы можете использовать PhantomJS . Это не так просто, как WKPDF для создания PDF, поскольку он имеет более широкий набор функций, но работает нормально.