.Rmd 转 .md 时保留代码高亮

Retain code highlighting when converting .Rmd to .md

我有一个 .rmd 文件要放在 GitHub 上。为了使结果与代码一起可见,我通过 RStudio 将 .rmd 文件转换为 .md

然而,转换后,当我在 GitHub 上查看 .md 文件时,(r-) 代码不再突出显示。我注意到 .md 文件中的代码块是通过缩进 4 次而不是三个反引号 + 语言定义来标识的。很明显,.rmd 文件中的语言定义丢失了。

我该如何解决这个问题?

注意:要重现,您只需在 RStudio 中打开一个新的 .rmd 文件并将 YAML header 更改为:

---
title: "TestRun"
output: 
 md_document:
 variant: markdown_github
---

非常感谢您的帮助!

Fenced 代码块(反引号 + 语言定义)是一种 non-standard(尽管越来越普遍)标记代码块的方式。因此,并非所有 Markdown 实现都理解它。事实上,standard Markdown 无法提供识别代码块语言的方法。在这种情况下,当转换为标准 Markdown 时,该信息会适当丢失。如果您想保留该信息,那么我建议转换为标准 Markdown 以外的内容。尽管根据另一个答案,如果您修复了 YAML 配置,那么您将使用 non-standard GitHub 风格的 Markdown,它确实支持围栏代码块。

如果您真的需要标准的 Markdown,那么您可能会发现 JavaScript 突出显示引擎可以很好地满足您的需求。一些更好的 JavaScript 突出显示引擎具有非常好的语言检测,因此您通常不需要标记代码块的语言。

缩进在 YAML 中很重要。

这是来自 R Markdown documentation 的示例:

---
output:
  md_document:
    variant: markdown_github
---

此 YAML 文档有一个键 output 的映射,其值是一个键 md_document 的映射,其值是一个键 variant 的映射,其值为标量 markdown_github.

JSON 中的等价物(例如)是:

{ "output": {
    "md_document": {
      "variant": "markdown_github"
    }
  }
}

这是您的文档(为清楚起见忽略 title 键):

---
output: 
 md_document:
 variant: markdown_github
---

您的文档有一个包含键 output 的映射,其值是一个包含两个键的映射,md_document(具有空值或 null 值)和 variant(标量值 markdown_github)。 JSON 等价物是:

{ "output": {
    "md_document": null,
    "variant": "markdown_github"
  }
}

看出区别了吗?