Отслеживание и включение нескольких файлов

Есть ли какая-либо вилка для уценки, которая позволяет ссылаться на другие файлы, например, на файл с включенными параметрами? В частности, я хочу создать отдельный файл разметки со ссылками, которые я вызываю часто, но не всегда (назовите это B.md), а затем, когда я ссылаюсь по ссылке в файле md, который я пишу (A.md), я бы например, чтобы вытащить ссылку из другого файла (B.md), а не из конца текущего файла (A.md).

Ответ 1

Короткий ответ - нет. Долгий ответ - да.: -)

Markdown был разработан, чтобы позволить людям писать простой, читаемый текст, который можно легко преобразовать в простую HTML-разметку. На самом деле это не макет документа. Например, нет реального способа выравнивания изображения вправо или влево. Что касается вашего вопроса, нет команды markdown для включения одной ссылки из одного файла в другой в любой версии уценки (насколько я знаю).

Ближе всего вы можете прийти к этой функции Pandoc. Pandoc позволяет объединять файлы как часть преобразования, что позволяет легко отображать несколько файлов в один вывод. Например, если вы создавали книгу, у вас могли бы быть такие главы:

01_preface.md
02_introduction.md
03_why_markdown_is_useful.md
04_limitations_of_markdown.md
05_conclusions.md

Вы можете объединить их, выполнив эту команду в том же каталоге:

pandoc *.md > markdown_book.html

Так как pandoc объединит все файлы перед выполнением перевода, вы можете включить свои ссылки в последний файл следующим образом:

01_preface.md
02_introduction.md
03_why_markdown_is_useful.md
04_limitations_of_markdown.md
05_conclusions.md
06_links.md

Таким образом, часть вашего 01_preface.md может выглядеть так:

I always wanted to write a book with [markdown][mkdnlink].

И часть вашего 02_introduction.md может выглядеть так:

Let start digging into [the best text-based syntax][mkdnlink] available.

Пока ваш последний файл содержит строку:

[mkdnlink]: http://daringfireball.net/projects/markdown

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

Ответ 2

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

cat *.md | markdown_py > youroutputname.html

работает почти так же, как и пример pandoc выше для версии Markdown для Python на моем Mac.

Ответ 3

Фактически вы можете использовать препроцессор Markdown (MarkdownPP). Запустив пример гипотетической книги из других ответов, вы создадите файлы .mdpp, представляющие ваши главы. Затем файлы .mdpp могут использовать директиву !INCLUDE "path/to/file.mdpp", которая рекурсивно заменяет директиву содержимым ссылочного файла в конечном результате.

chapters/preface.mdpp
chapters/introduction.mdpp
chapters/why_markdown_is_useful.mdpp
chapters/limitations_of_markdown.mdpp
chapters/conclusions.mdpp

Затем вам понадобится index.mdpp, который содержит следующее:

!INCLUDE "chapters/preface.mdpp"
!INCLUDE "chapters/introduction.mdpp"
!INCLUDE "chapters/why_markdown_is_useful.mdpp"
!INCLUDE "chapters/limitations_of_markdown.mdpp"
!INCLUDE "chapters/conclusions.mdpp"

Чтобы сделать вашу книгу, вы просто запустите препроцессор на index.mdpp:

$ markdown-pp.py index.mdpp mybook.md

Не забудьте посмотреть readme.mdpp в MarkdownPP для отображения функций препроцессора, подходящих для больших проектов документации.

Ответ 4

Мое решение - использовать m4. Он поддерживается на большинстве платформ и включен в пакет binutils.

Сначала включите макрос changequote() в файл, чтобы изменить символы цитирования на то, что вы предпочитаете (по умолчанию - `). Макрос удаляется при обработке файла.

changequote(`{{', `}}')
include({{other_file}})

В командной строке:

m4 -I./dir_containing_other_file/ input.md > _tmp.md
pandoc -o output.html _tmp.md

Ответ 5

Совсем недавно я написал что-то вроде этого в Node под названием markdown-include, которое позволяет включать файлы разметки с синтаксисом стиля C, например так:

#include "my-file.md"

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

Вы можете включить это в любой файл уценки, который вы хотите. Этот файл также может содержать больше включений, а markdown-include сделает внутреннюю ссылку и сделает всю работу за вас.

Вы можете скачать его через npm

npm install -g markdown-include

Ответ 6

Multimarkdown имеет это изначально. Это называет это включением файла:

{{some_other_file.txt}}

это все, что нужно. Странное название, но все галочки отмечены галочкой.

Ответ 7

Фактически вы можете использовать \input{filename} и \include{filename}, которые являются латексными командами, непосредственно в Pandoc, потому что он поддерживает почти все синтаксисы html и latex.

Но будьте осторожны, включенный файл будет считаться файлом latex. Но вы можете легко скомпилировать markdown до latex с помощью Pandox.

Ответ 8

Я использую includes.txt файл со всеми моими файлами в правильном порядке двутавровых выполнить pandoc как это:

pandoc -s $(cat includes.txt) --quiet -f markdown -t html5 --css pandoc.css -o index.html

Работает как шарм!

Ответ 9

Я думаю, нам лучше принять новый синтаксис включения файла (так что не испортить кодовые блоки, я думаю, что включение стиля C совершенно неверно), и я написал небольшой инструмент в Perl, назвав cat.pl, потому что он работает как cat (cat a.txt b.txt c.txt объединит три файлы), но он объединяет файлы в глубину, а не по ширине. Как использовать?

$ perl cat.pl <your file>

Синтаксис в деталях:

  • рекурсивные файлы include: @include <-=path=
  • просто включите его: %include <-=path=

Он может корректно обрабатывать включение файла петли (если a.txt < - b.txt, b.txt < - a.txt, то что вы ожидаете?).

Пример:

a.txt:

a.txt

    a <- b

    @include <-=b.txt=

a.end

b.txt:

b.txt

    b <- a

    @include <-=a.txt=

b.end

perl cat.pl a.txt > c.txt, c.txt:

a.txt

    a <- b

    b.txt

        b <- a

        a.txt

            a <- b

            @include <-=b.txt= (note:won't include, because it will lead to infinite loop.)

        a.end

    b.end

a.end

Дополнительные примеры в https://github.com/district10/cat/blob/master/tutorial_cat.pl_.md.

Я также написал версию Java, имеющую идентичный эффект (не тот, но близкий).

Ответ 10

Asciidoc (http://www.methods.co.nz/asciidoc/) на самом деле является скидкой на стероиды. В целом, Asciidoc и Markdown будут выглядеть очень похоже, и их будет довольно легко переключать. Огромным преимуществом Asciidoc перед уценкой является то, что он поддерживает уже включенные, для других файлов Asciidoc, но также для любого формата, который вам нравится. Вы даже можете частично включить файлы на основе номеров строк или тегов внутри включенных файлов.

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

Например, вы можете получить файл asciidoc с таким содержимым:

// [source,perl]
// ----
// include::script.pl[]
// ----

и поддерживать ваш образец в script.pl

И я уверен, что вам будет интересно, так что да, Github также поддерживает Asciidoc.

Ответ 11

Я на самом деле удивлен, что никто на этой странице не предлагал никаких HTML-решений. Насколько я понял, файлы MarkDown могут включать в себя большую часть (если не все) тегов HTML. Так что следуйте этим шагам:

  1. Отсюда: поместите ваши файлы MarkDown в теги <span style="display:block">... </span> чтобы убедиться, что они будут отображаться как уценки. У вас есть множество других стилевых свойств, которые вы можете добавить. То, что мне нравится, это text-align:justify.

  2. Отсюда: включите файлы в ваш основной файл, используя <iframe src="/path/to/file.md" seamless></iframe>

PS1. Это решение не работает на всех движках/рендерах MarkDown. Например, Typora правильно отображала файлы, а код Visual Studio - нет. Было бы здорово, если бы другие могли поделиться своим опытом с другими платформами. Особенно хотелось бы услышать о GitHub и GitLab...

PS2. При дальнейшем исследовании, как представляется, возникают серьезные проблемы несовместимости, которые приводят к тому, что это неправильно отображается на многих платформах, включая Typora, GitHub и код Visual Studio. Пожалуйста, не используйте это, пока я не разрешаю их. Я не буду удалять ответ только ради обсуждения и, если возможно, вы можете поделиться своим мнением.

PS3. Для дальнейшего изучения этой проблемы я задавал эти вопросы здесь, в StackOverflow и здесь, в Reddit.

PS4. После некоторого изучения я пришел к выводу, что на данный момент AsciiDoc является лучшим вариантом для документации. Он поставляется со встроенной функцией включения, он обрабатывается GitHub, а основные редакторы кода, такие как Atom и vscode, имеют расширения для предварительного просмотра в реальном времени. Можно использовать Pandoc или другие инструменты для автоматического преобразования существующего кода MarkDown в AsciiDoc с небольшими изменениями.

ПС5. Еще одним легковесным языком разметки со встроенной функциональностью включения является reStructuredText. Он поставляется с синтаксисом .. include:: inclusion.txt lusion.txt по стандарту. Также есть редактор ReText с предварительным просмотром.

Ответ 12

Я использую Marked 2 в Mac OS X. Он поддерживает следующий синтаксис для включения других файлов.

<<[chapters/chapter1.md]
<<[chapters/chapter2.md]
<<[chapters/chapter3.md]
<<[chapters/chapter4.md]

К сожалению, вы не можете передать это pandoc, поскольку он не понимает синтаксис. Однако написать script, чтобы удалить синтаксис для создания командной строки pandoc, достаточно просто.

Ответ 13

ИМХО, Вы можете получить свой результат, объединив свои входные *.md файлы, такие как:

$ pandoc -s -o outputDoc.pdf inputDoc1.md inputDoc2.md outputDoc3.md