Встраивание одного документа уценки в другой

Есть ли способ встроить один документ уценки (или его подварианты - я использую PanDoc) в другой, за исключением использования jQuery().load(url)?

Я хотел бы иметь документ, например. main.md, chapter1.md, chapter2.md, с main.md погрузка chapter1.md а также chapter2.md автоматически.

main.md будет иметь текст между двумя главами, например

main.md:

Some opening text...
...
[chapter1.md]

Some additional text...
...
[chapter2.md]
...
something else.

Так что я не могу использовать cat *.md > final.md подход

6 ответов

Решение

У самой разметки нет обозначения для включения файлов, что, скорее, винты.

У pandoc есть пример использования настраиваемого фильтра haskell для блоков кода для включения файлов, но это a. оставляет блок кода вокруг текста и (что более важно) б. не анализирует новый файл как уценку, и, честно говоря, мой haskell не справился с задачей исправить это.

Тем не менее, вы можете достичь этого, выполнив предварительную обработку, используя perl*. Я предполагаю, что каждое включение находится на отдельной строке формы, показанной выше.

perl -ne 's/^\[(.+)\].*/`cat $1`/e;print' main.md > final.md

* Мне не нравится прибегать к Perl, но у sed нет возможности читать из файла, используя шаблон соответствия, чтобы определить имя.

Если вы не хотите, чтобы подглавы были встроенными, вы можете просто вставить ссылки в основную главу. Таким образом, вам не нужен шаг предварительной обработки.

Как писал Оливер Мэтьюз, вы можете написать свой собственный шаг предварительной обработки с помощью perl.

Или вы можете использовать существующий препроцессор, как m4 или же cpp (C PreProcessor), который позволяет включать файлы.cpp вероятно, не справляется с разделами кода C в документах. Особенно, когда в них больше директив включения.

В Интернете также есть наборы инструментов, которые объединяют отдельные документы разметки в нечто большее. К сожалению, в настоящее время у меня проблемы с доступом к резервной копии моих закладок.

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

Вот версия фильтра pandoc-include, написанная на Python https://github.com/DCsunset/pandoc-include.

Я попробовал это, и это работает хорошо. Он имеет несколько полезных опций, таких как отступ и удаление включенного файла.

Рекурсивная версия ответа @Oliver Matthews , но с использованием синтаксиса, подобного вики-ссылкам![[chapter1.md]]


parseMd.sh

      #!/usr/bin/env bash
perl -ne 's#^!\[\[(.+?)\]\].*#`'$0' "$1"`#e;print' "$@"

и использовать его так

      ./parseMd.sh main.md > final.md

Использование его с pandoc

      pandoc <(./parseMd.sh main.md) -o final.pdf

Я знаю, что это действительно старо, но случайно наткнулся на это. Если вам нужны подобные вещи, ознакомьтесь с документацией asciidoc. отображает базовые функции на github и предоставляет такие функции/синтаксис, какinclude. довольно круто, если честно, вы даже можете использовать плагины и тому подобное — мой любимый — Mermaid для рендеринга диаграмм. Вы также можете выбрать процессор для вывода HTML или PDF из ваших файлов adoc.

Надеюсь, это поможет следующему встречному человеку.

Я недавно читал эти сообщения, хотя они уже немного устарели, а также те, что в Markdown и включают несколько файлов . Я относительно зеленый во всем этом, поэтому я не смог заставить работать функцию включения уценки Сетена, так как я не знаю javascript.

Но мне кажется, что вы могли бы довольно легко написать простую рекурсивную функцию на Python. Он будет принимать файл .md в качестве своего аргумента и анализировать его, ища характерный синтаксис, указывающий, что/где файл аргументов вызывает другой файл .md. Синтаксический анализ будет не только искать характерный синтаксис, но и строить единую длинную строку всех уценок, которые он проверил на этом пути. Если функция встречает ссылку на файл .md, она вызывает себя, используя только что найденный файл .md. Когда он достигает дна, он снова всплывает через рекурсивные уровни, возвращая всю уценку, которую он прошел за свое погружение (я). Конечным результатом будет возврат одного файла .md со всей уценкой внутри него.

Затем можно легко передать этот увеличенный возвращенный файл .md со 100% стандартной уценкой в ​​pandoc.

Другие вопросы по тегам