减价并包含多个文件
是否有任何降价分叉,允许您引用其他文件,如包含文件? 具体来说,我想创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}
这些是乳胶命令,因为它支持几乎所有的html
和latex
语法。
但要小心,包含的文件将被视为latex
文件。 但是你可以很容易地用Pandox
编辑你的markdown
。
我认为我们最好采用一个新的文件包含语法 (所以不会弄乱代码块,我认为C风格的包含是完全错误的),我写了一个Perl的小工具,命名为cat.pl
, cat
( cat 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命令行是很容易的。