是否有任何markdown fork允许你引用其他文件,比如包含文件?具体来说,我想创建一个单独的markdown文件,其中包含我经常调用但不总是调用的链接(调用此B.md),然后当我通过引用链接到我正在写入的md文件(A.md)时,我希望它从另一个文件(B.md)中拉出链接,而不是从当前文件(A.md)的末尾。


当前回答

阿西多克其实是类固醇的减价品。总的来说,Asciidoc和Markdown看起来非常相似,而且很容易切换。与markdown相比,Asciidoc的一个巨大好处是它已经支持include,用于其他Asciidoc文件,还支持任何您喜欢的格式。您甚至可以根据所包含文件中的行号或标记部分包含文件。

当你写文档时,包含其他文件真的是一个救星。

例如,你可以有一个包含以下内容的asciidoc文件:

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

并在script.pl中维护您的示例

我相信你会想,是的,Github也支持asciidoc。

其他回答

您实际上可以使用Markdown预处理器(MarkdownPP)。运行其他答案中的假设图书示例,您将创建.mdpp文件来表示您的章节。然后.mdpp文件可以使用!INCLUDE "路径/to/file。Mdpp指令,该指令在最终输出中用引用文件的内容递归地替换该指令。

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

然后需要一个索引。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存储库中的mdpp,用于展示适合大型文档项目的预处理器特性。

如果您正在使用pandoc进行markdown处理,除了在调用pandoc时使用多个输入markdown文件外,还没有本地解决方案(在https://github.com/jgm/pandoc/issues/553中讨论)。

然而,使用codebraid(实际上是为了包括自动生成的内容Markdown)可以实现这一点:

This is the content of the main Markdown file `main.md`. 
Below this line, the content of the file `chapter01.md` is included:

```{.python .cb.run}
with open('chapter01.md') as fp:
    print(fp.read())
```

This line is printed below the external content.

要将其转换为任何输出格式,可以使用如下代码:

codebraid pandoc main.md --to markdown

虽然codebraid可能被认为是“只是”包括外部Markdown文件,但它允许更多,例如包括来自外部来源的CSV或Excel表格:

Details are shown in the following table:

```{.python .cb.run}
import pandas as pd
table = pd.read_csv('table.csv')
print(table.to_markdown())
```

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

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

遗憾的是,您不能将其提供给pandoc,因为它不理解语法。但是,编写一个脚本来剥离语法来构造一个pandoc命令行是非常容易的。

实际上,让我感到惊讶的是,这个页面上没有人提供任何HTML解决方案。据我所知,MarkDown文件可以包括大部分(如果不是全部)HTML标签。所以请遵循以下步骤:

从这里:把你的MarkDown文件放在<span style="display:block">…</span>标签,以确保它们将被呈现为markdown。你还有很多其他的样式属性可以添加。我喜欢的一个是text-align:justify。 从这里开始:使用<iframe src="/path/to/file将文件包含在主文件中。医学博士“无缝> < / iframe >

p.s. 1。这个解决方案并不适用于所有MarkDown引擎/渲染。例如,Typora确实正确地渲染了文件,但Visual Studio Code却没有。如果其他人能在其他平台上分享他们的经验,那就太好了。我特别想了解GitHub和GitLab…

P.S.2。在进一步的调查中,似乎有重大的不兼容问题导致在许多平台上不能正确地呈现,包括Typora, GitHub和Visual Studio代码。在我解决之前请不要用这个。我不会删除答案只是为了讨论,如果你可以分享你的意见。

P.S.3。为了进一步调查这个问题,我在StackOverflow和Reddit上提出了这个问题。

P.S.4。经过一番深入研究后,我得出的结论是,就目前而言,AsciiDoc是更好的文档选择。它带有内置的包含功能,由GitHub呈现,Atom和vscode等主要代码编辑器都有用于实时预览的扩展。可以使用Pandoc或其他工具自动将现有MarkDown代码转换为AsciiDoc,并进行微小的更改。

P.S.5。另一种具有内置包含功能的轻量级标记语言是reStructuredText。它附带…包括::inclusion.txt 标准语法。还有带有实时预览的文本编辑器。

我只想提一下,在将输入文件输送到markdown_py之前,可以使用cat命令连接输入文件,这与pandoc处理多个输入文件的效果相同。

cat *.md | markdown_py > youroutputname.html

在我的Mac上,Python版本的Markdown与上面的pandoc示例几乎相同。