Уценка и в том числе несколько файлов - PullRequest
157 голосов
/ 24 января 2011

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

Ответы [ 13 ]

184 голосов
/ 03 апреля 2011

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

Markdown был разработан, чтобы позволить людям писать простой, читаемый текст, который можно легко преобразовать в простую HTML-разметку. Это действительно не делает макет документа. Например, нет реального способа выровнять изображение вправо или влево. Что касается вашего вопроса, нет команды markdown, которая бы включала одну ссылку из одного файла в другой в любой версии 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 говорится, что она добавляет пустую строку между файлами, которые объединяются таким образом, но у меня не получилось без пустой строки.

48 голосов
/ 16 марта 2013

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

cat *.md | markdown_py > youroutputname.html

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

22 голосов
/ 03 июня 2014

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

14 голосов
/ 19 марта 2016

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

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

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

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

m4 -I./dir_containing_other_file/ input.md > _tmp.md
pandoc -o output.html _tmp.md
13 голосов
/ 20 февраля 2015

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

#include "my-file.md"

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

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

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

npm install -g markdown-include
7 голосов
/ 09 марта 2018

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

{{some_other_file.txt}}

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

5 голосов
/ 31 января 2018

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

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

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

5 голосов
/ 15 ноября 2015

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

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

3 голосов
/ 20 февраля 2018

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

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

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

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

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

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

3 голосов
/ 31 декабря 2016

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

$ perl cat.pl <your file>

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

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

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

Пример:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...