2

Я использую Pandoc для создания презентаций Reveal.js из документов Markdown, перейдя на него из Google Slides. С самого начала я решил, что презентации для различных событий и лекций должны автоматически комбинироваться из нескольких файлов - таким образом, легче поддерживать отдельные слайды без необходимости постоянного обновления контента в нескольких местах.

Решение на данный момент объединяет Codekit (используя его язык Kit) и pandoc. Таким образом, отдельные части презентаций подготавливаются в редакторе, затем передаются в одном файле .kit с помощью операторов @import, а затем полученный файл Markdown обрабатывается pandoc, который создает HTML-презентацию (последняя часть выполняется системой сборки Sublime Text. ).

Я бы хотел как-то упростить этот процесс с помощью какого-то скрипта, который автоматически обрабатывал бы объединенный файл Markdown каждый раз, когда его съедал pandoc. В StackExchange есть сообщения, которые ссылаются на фильтры Haskell, но установка Haskell слишком велика для моей крошечной системы (минимум 800 МБ).

Есть ли способ включить файлы с другим языком программирования или трюк? Например, я знаю, что можно объединить несколько файлов, объединив их имена в команде pandoc, но это не делает рабочий процесс более плавным и быстрым.

2 ответа2

1

В принципе, вы можете писать фильтры Pandoc на любом языке, хотя Haskell особенно подходит. Библиотека pandocfilters позволяет легко писать их на python.

Вот учебник по фильтрам Pandoc. Он содержит пример фильтра Haskell для включаемых файлов, который должно быть довольно легко преобразован в фильтр Python с использованием pandocfilters.

Смотрите также каталог примеров в репозитории pandocfilters.

1

Я наконец выяснил несколько способов сделать задачу.

Во-первых, использовать фильтр pandoc, написанный на Python, который включает в себя (он работает так же, как фильтр Haskell, описанный в pandoc docs). Однако теперь он адаптирован для использования только с включенными блоками кода, а не с частями общего содержимого.

Второй способ заключается в использовании встроенного сценария Perl, который может быть добавлен перед командой сборки (впервые увиденной здесь). Этот путь оказался полезным, и я буду придерживаться его некоторое время, потому что

  1. Я не очень хорош в Python и
  2. он позволяет выполнять некоторые удобные задачи поиска и замены, такие как замена частей путей изображений и включаемых файлов на ходу.

Ниже приведена команда, которую я использую для создания слайд-шоу в формате Reveal.js (хотя эта и предназначена для загрузки на некоторый веб-хостинг, есть и другие варианты сборки для создания автономного файла слайд-шоу с использованием --self-contained contains в pandoc. или, например, "собрать" все файлы, относящиеся к слайд-шоу, в папку на рабочем столе):

perl -ne 's/^#\\((.+)\\).*/`cat \"${project_path/\\//\\\\\\//g}\\$1\"`/e;s/\\((\\/_common\\/img)/(\\/presentations\\$1/g;print' ${file_base_name}.md > result.md && pandoc -s -t revealjs --variable revealjs-url=http://www.site.com/presentations/_common/resources/revealjs --css=http://www.site.com/presentations/_common/resources/customcss_sky.css -H ${project_path}/_common/resources/customhtml.html --highlight-style haddock result.md -o index.html && trash result.md

Эта команда:

  1. Заменяет все выражения #(путь / к / включить) (пути должны относиться к папке проекта) с содержимым include;
  2. Заменяет пути в изображениях (относительно папки проекта) на путь сервера к каталогу изображений;
  3. Вывод полученной уценки во временный файл;
  4. Создает слайд-шоу HTML с Pandoc;
  5. Удаляет временный файл утилитой trash Али Рантакари.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .