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


当前回答

vcode -markdown-preview-enhanced支持@import语法

https://github.com/shd101wyy/vscode-markdown-preview-enhanced

这可能意味着它是底层工具的一部分

https://github.com/shd101wyy/mume

以及其他基于mume的工具

https://github.com/gabyx/TechnicalMarkdown

下面是我如何在我的文档中使用它的一个例子,我用vcode -markdown-preview-enhanced处理:


[[Epigenetics]]
@import "epigenetics.md"

其他回答

如果您正在使用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命令行是非常容易的。

就在最近,我在Node中写了一些类似的东西,叫做markdown-include,它允许你用C风格的语法包含markdown文件,像这样:

#include "my-file.md"

我相信这和你问的问题很吻合。我知道这是一个旧的,但我至少想更新它。

您可以将此包含在任何您希望的标记文件中。该文件还可以有更多的include, markdown-include将创建一个内部链接,并为您完成所有工作。

你可以通过npm下载它

npm install -g markdown-include

另一个使用markdown-it和jQuery的基于html的客户端解决方案。下面是一个小的HTML包装作为主文档,它支持无限的markdown文件的include,但不支持嵌套include。在JS注释中提供了解释。错误处理略。

<script src="/markdown-it.min.js"></script>
<script src="/jquery-3.5.1.min.js"></script>

<script> 
  $(function() {
    var mdit = window.markdownit();
    mdit.options.html=true;
    // Process all div elements of class include.  Follow up with custom callback
    $('div.include').each( function() {
      var inc = $(this);
      // Use contents between div tag as the file to be included from server
      var filename = inc.html();
      // Unable to intercept load() contents.  post-process markdown rendering with callback
      inc.load(filename, function () {
        inc.html( mdit.render(this.innerHTML) );
      });
  });
})
</script>
</head>

<body>
<h1>Master Document </h1>

<h1>Section 1</h1>
<div class="include">sec_1.md</div>
<hr/>
<h1>Section 2</h1>
<div class="include">sec_2.md</div>

实际上,让我感到惊讶的是,这个页面上没有人提供任何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 标准语法。还有带有实时预览的文本编辑器。