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

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

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

    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's start digging into [the best text-based syntax][mkdnlink] available. 

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

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

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

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

     cat *.md | markdown_py > youroutputname.html 

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

    Фактически вы можете использовать препроцессор Markdown ( MarkdownPP ). .mdpp пример гипотетической книги из других ответов, вы .mdpp файлы .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 для изложения функций препроцессора, подходящих для больших проектов документации.

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

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

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

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

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

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

     #include "my-file.md" 

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

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

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

     npm install -g markdown-include 

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

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

    Я использую файл include.txt со всеми моими файлами в правильном порядке, я запускаю pandoc следующим образом:

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

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

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

     $ perl cat.pl  

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

    • рекурсивные файлы 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, имеющую идентичный эффект (не то же самое, но близкое).

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

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

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

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

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

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

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

    и сохраните свой образец в script.pl

    И я уверен, что вы будете удивляться, да, Гитуб также поддерживает asciidoc.

    У мультимаркинга есть это изначально. Он вызывает это переключение файлов :

     {{some_other_file.txt}} 

    это все, что требуется. Странное имя, но все галочки.

    Давайте будем гением компьютера.