【问题标题】:Embedding one markdown document in another将一个降价文档嵌入另一个
【发布时间】:2021-03-03 01:38:33
【问题描述】:

除了使用jQuery().load(url)之外,有没有办法在另一个文档中嵌入一个降价(或其子风格 - 我正在使用 PanDoc)?

我想要一份文件,例如。 main.mdchapter1.mdchapter2.mdmain.md 自动加载 chapter1.mdchapter2.md

main.md 将在两章之间添加文本,例如

main.md:

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

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

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

【问题讨论】:

    标签: markdown


    【解决方案1】:

    Markdown 本身缺少包含文件的符号,这反而搞砸了。

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

    但是,您可以通过使用perl* 进行预处理传递来实现此目的。我假设每个包含都在上面显示的形式的一行中。

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

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

    【讨论】:

    • 非常感谢@OliverMatthews。我可能会使用 python 而不是 perl,但预处理听起来是个好主意。
    • 在投入了数十个小时来寻找一种可行且快速的实施方法后,Pandoc 中包含的内容终于奏效了。谢谢!
    • 这是我的 perl 语句现在的样子 - 它稍作修改,因此它可以包含带空格的文件路径,并与 AutoFileName 等路径搜索 ST 插件兼容。它也逃脱了在 ST 构建系统中工作。语法为#(path/to/file)perl -ne 's/^#\\((.+)\\).*/cat \"\\$1\"/e;print' ${file_base_name}.md > result.md
    • 对此的 markdown 嘘声。但是是的,你做了可能是最不痛苦的解决方法
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 谢谢@Sebastian。也是一个非常有用的链接。
    • 我考虑过使用 cpp(并使用 #include),但认为这会很痛苦,因为标题也以 #s 开头。对于那些喜欢更深奥的东西的人来说,总是有 funnelweb(这可能是我个人会使用的,但我确实尝试将其限制为您会安装的东西)。
    【解决方案3】:

    我最近一直在阅读这些帖子,尽管它们现在有点老了,还有Markdown and including multiple files 上的那些。我对这一切都比较陌生,所以我无法让Sethen's markdown-include function 工作,因为我不懂javascript。

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-19
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2023-03-07
      相关资源
      最近更新 更多