如何使Rmarkdown导出的.md文件中代码块输出被代码围栏包裹?
解决Rmarkdown直接转MD时代码输出带围栏包裹的问题
自定义knitr输出钩子(核心方案)
无需生成HTML文件,直接通过自定义knitr的输出钩子,就能让代码块的输出自动被```围栏包裹:
- 在Rmarkdown文档的起始代码块中添加以下配置:
knitr::opts_chunk$set(echo = TRUE) knitr::knit_hooks$set(output = function(x, options) { # 清理多余的首尾换行,避免围栏内出现空行 x <- gsub("^\n+|\n+$", "", x) # 为输出内容包裹代码围栏 paste0("```\n", x, "\n```") })
- YAML头部直接指定输出格式为
md_document,无需依赖HTML相关配置:
--- title: "你的文档标题" output: rmarkdown::md_document: variant: gfm ---
进阶调整(可选)
如果需要区分代码输出和表格输出的围栏格式(比如给代码输出指定语言标识),可以修改钩子逻辑:
knitr::knit_hooks$set(output = function(x, options) { x <- gsub("^\n+|\n+$", "", x) # 根据代码块引擎判断是否添加语言标识 lang_tag <- ifelse(options$engine == "r", "r", "") paste0("```", lang_tag, "\n", x, "\n```") })
验证方式
直接运行rmarkdown::render("你的文档文件名.Rmd", output_format = "md_document"),生成的MD文件里,penguins数据集这类输出会被正确包裹在代码围栏中,效果和通过html_document+keep_md: TRUE生成的一致。
内容的提问来源于stack exchange,提问作者Mike Schmidt
相关产品推荐
相关产品推荐

