Dołącz pliki w dokumencie Markdown za pomocą Pandoc (z wyjątkiem Haskell)

2

używam Pandoc aby utworzyć prezentacje Reveal.js z dokumentów Markdown, po przełączeniu się na nie z Google Slides. Od samego początku zdecydowałem, że prezentacje dla różnych wydarzeń i wykładów mają być automatycznie łączone z wielu plików - dzięki temu łatwiej jest utrzymywać osobne slajdy bez konieczności ciągłej aktualizacji treści w kilku miejscach.

Rozwiązanie na razie łączy Codekit (używając języka Kit) i pandoc. Tak więc poszczególne części prezentacji są przygotowywane w edytorze, a następnie przywoływane w jednym .kit plik z instrukcjami @import, a następnie wynikowy plik Markdown zostaje przetworzony przez pandoc, który tworzy prezentację HTML (ostatnia część jest wykonywana przez system kompilacji Sublime Text).

Chciałbym jakoś uprościć ten proces za pomocą skryptu, który automatycznie przetwarzał połączony plik Markdown za każdym razem, gdy pandoc go zjada. Są posty na StackExchange, które odnoszą się do filtrów Haskell, ale instalacja Haskell jest zbyt duża dla mojego maleńkiego systemu (minimum 800Mb).

Czy istnieje sposób na włączenie plików z innym rodzajem języka programowania lub trikiem? Wiem na przykład, że można połączyć kilka plików, łącząc ich nazwy w poleceniu pandoc, ale to nie usprawnia ani nie usprawnia przepływu pracy.

certainlyakey
źródło

Odpowiedzi:

1

Zasadniczo można pisać filtry pandoc w dowolnym języku, choć Haskell jest szczególnie odpowiedni. The pandocfiltery biblioteka ułatwia pisanie ich w Pythonie.

Tutaj jest samouczek na temat filtrów pandoc . Zawiera przykładowy filtr Haskella dla plików włączania, który powinien być dość łatwy do przetłumaczenia na filtr Pythona przy użyciu filtrów pandoc.

Zobacz także katalog przykłady w repozytorium pandocfilters.

John MacFarlane
źródło
1

W końcu odkryłem kilka sposobów wykonania zadania.

Pierwszy to użycie a filtr pandoc napisany w Pythonie, który zawiera (działa tak samo jak filtr Haskella opisany w dokumentach pandoc). Jednak teraz jest przystosowany do używania tylko z dołączonymi blokami kodu, a nie z ogólnymi elementami treści.

Drugim sposobem jest użycie wbudowanego skryptu Perla, który może być dołączony do polecenia kompilacji (pierwszy raz widziany tutaj ). Ta ścieżka okazała się przydatna i będę się jej trzymać przez jakiś czas, ponieważ

  1. Nie jestem zbyt dobry w Pythonie i
  2. pozwala to na wykonanie pewnych przydatnych zadań wyszukiwania i zastępowania, takich jak natychmiastowe zastępowanie części ścieżek obrazów i dołączonych plików.

Poniżej znajduje się polecenie, którego używam do tworzenia pokazu slajdów w formacie Reveal.js (choć ten przeznaczony do przesłania na jakiś hosting, istnieją inne warianty do budowania samodzielnego pliku pokazu slajdów przy użyciu --self-contained opcja pandoc lub na przykład „zbieranie” wszystkich plików związanych z pokazem slajdów do folderu na pulpicie):

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

To polecenie:

  1. Zastępuje wszystkie wyrażenia # (path / to / include) (ścieżki muszą być względne w stosunku do folderu projektu) z zawartością include ';
  2. Zastępuje ścieżki w obrazach (względem folderu projektu) ścieżką serwera do katalogu obrazów;
  3. Wyprowadza wynikową Markdown do pliku tymczasowego;
  4. Tworzy pokaz slajdów HTML za pomocą pandoc;
  5. Usuwa tymczasowy plik z Ali Rantakari trash użyteczność.
certainlyakey
źródło