35

除了使用jQuery().load(url)?

我想要一个包含例如的文件。main.md, chapter1.md, chapter2.md, 带main.md加载chapter1.mdchapter2.md自动。

main.md两章之间会有文字,例如

main.md

Some opening text...
...
[chapter1.md]

Some additional text...
...
[chapter2.md]
...
something else.

所以我不能使用cat *.md > final.md方法

4

3 回答 3

16

Markdown 本身缺乏包含文件的表示法,这反而会导致问题。

pandoc有一个关于在代码块上使用自定义 haskell 过滤器来包含文件的示例,但是这个 a. 在文本周围留下一个代码块和(更重要的是)b。不会将新文件解析为降价,坦率地说,我的 haskell 无法完成修复该问题的任务。

但是,您可以通过使用perl*. 我假设每个包含都在上面显示的形式的一行上。

perl -ne 's/^\[(.+)\].*/`cat $1`/e;print' main.md > final.md

*我不喜欢不得不求助于 perl,但是 sed 缺乏使用匹配模式从文件中读取来确定名称的能力。

于 2013-08-29T17:24:06.227 回答
4

如果您不希望子章节内联,您可以简单地将链接插入主章节。这样,您不需要预处理步骤。

正如 Oliver Matthews 所写,您可以使用 perl 编写自己的预处理步骤。

或者,您可以使用现有的预处理器,例如m4cpp(C 预处理器),它允许包含文件。 cpp不过,可能无法很好地处理文档中的 C 代码部分。特别是当其中有更多包含指令时。

互联网上还有一些工具链可以将单独的 mardown 文档组合成更大的东西。不幸的是,我目前无法访问我的书签备份。

这是一个类似的问题,有答案: Markdown and include multiple files 尽管答案没有解释如何在其他文本之间插入子章节。

于 2013-08-29T18:17:52.143 回答
0

我最近一直在阅读这些帖子,尽管它们现在有点老了,以及Markdown 和包含多个文件的那些。我对这一切都比较陌生,所以我无法让Sethen 的 markdown-include 函数工作,因为我不懂 javascript。

但在我看来,你可以很容易地用 Python 编写一个简单的递归函数。它将一个 .md 文件作为其参数并对其进行解析,寻找指示参数文件正在调用另一个 .md 文件的特征语法。解析不仅会寻找特征语法,还会构建一个长字符串,其中包含它在此过程中检查过的所有降价。如果函数遇到对 .md 文件的引用,它会使用刚刚找到的 .md 文件调用自身。当它到达底部时,它会通过递归级别弹回,返回它通过潜水的所有降价。最终结果将是返回一个包含所有降价的单个 .md 文件。

然后很容易将这个更大的、返回的、100% 标准的 markdown .md 文件提供给 pandoc。

于 2021-03-02T17:38:33.863 回答