减价并包含多个文件

是否有任何降价分叉,允许您引用其他文件,如包含文件? 具体来说,我想创build一个单独的减价文件,我经常调用的链接,但不是总是(调用这个B.md),然后当我通过引用链接在我正在写的md文件(A.md),我会像它从其他文件(B.md),而不是从当前文件(A.md)的结尾拉链接。

最简洁的答案是不。 长的答案是肯定的。 🙂

Markdown被devise为允许人们编写简单易读的文本,可以很容易地转换成简单的HTML标记。 它并没有真正做文件的布局。 例如,没有真正的方法来alignment图像的右侧或左侧。 至于你的问题,在任何版本的markdown(据我所知)中没有markdown命令来包含从一个文件到另一个文件的单个链接。

最接近这个function的是Pandoc 。 Pandoc允许您将文件合并为转换的一部分,这使您可以轻松地将多个文件渲染为单个输出。 例如,如果你正在创build一本书,那么你可以有这样的章节:

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命令在input文件之前连接input文件,这与markdown有相同的效果,与pandoc对多个input文件进入的效果相同。

猫* .md | markdown_py> youroutputname.html

和Mac上的Python版本的pandoc例子非常相似。

您实际上可以使用Markdown预处理器( MarkdownPP )。 使用其他答案中的假设书籍示例运行,您将创build表示章节的.mdpp文件。 然后, .mdpp文件可以使用!INCLUDE "path/to/file.mdpp"指令,该指令recursion地将指令replace为最终输出中引用文件的内容。

 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 

不要忘记查看MarkdownPP存储库中的readme.mdpp ,以了解适用于大型文档项目的预处理器function。

就在最近,我在Node中写了一个叫做markdown-include的东西 ,它允许你用C风格的语法包括降价文件,如下所示:

 #include "my-file.md" 

我相信这与您所问的问题很好地吻合。 我知道这是一个旧的,但我想至less更新它。

您可以将其包含在您希望的任何降价文件中。 该文件也可以有更多的包括和降价 – 包括将做一个内部链接,并为您做所有的工作。

你可以通过npm下载

 npm install -g markdown-include 

我的解决scheme是使用m4。 它在大多数平台上得到支持,并且包含在binutils软件包中。

首先在文件中包含一个macroschangequote() ,将引用字符更改为你喜欢的内容(默认为“')。 该文件被处理时macros被删除。

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

在命令行上:

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

事实上,你可以直接在Pandoc使用\input{filename}\include{filename}这些是乳胶命令,因为它支持几乎所有的htmllatex语法。

但要小心,包含的文件将被视为latex文件。 但是你可以很容易地用Pandox编辑你的markdown

我认为我们最好采用一个新的文件包含语法 (所以不会弄乱代码块,我认为C风格的包含是完全错误的),我写了一个Perl的小工具,命名为cat.plcatcat a.txt b.txt c.txt将合并三个文件),但它合并深度文件,而不是宽度 。 如何使用?

 $ perl cat.pl <your file> 

语法详细是:

  • recursion包含文件: @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版本(不一样但接近)。

我在Mac OS X上使用Marked 2,它支持以下语法来包含其他文件。

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

可悲的是,你无法将其提供给pandoc,因为它不理解语法。 但是,编写一个脚本来删除语法来构build一个pandoc命令行是很容易的。