在 Rmd 到 Md 中追加带有 knit_hooks 的文本

Append text with knit_hooks in Rmd to Md

我的目标是在 Rmd 到 md 的转换过程中在 md 文件的最后添加一些动态文本。所以我正在使用 knitr 钩子,如下所示。

---
title: "A title"
excerpt: "Excerpt"
output:
  md_document:
    pandoc_args: ["--wrap=none"]
    variant: gfm+footnotes
    preserve_yaml: TRUE
knit: (function(inputFile, encoding) {
  knitr::knit(inputFile);
  txt <- "hello";
  prev_doc_hook <- knitr::knit_hooks$get("document");
  knitr::knit_hooks$set(document = function(x) {prev_doc_hook(append(x, txt))});
 })
date: "2021/03/07"
---

问题 - 根据上面的代码,输出的 md 文件格式正确,但未附加 txt 变量。

但是如果在knitr::knit_hooks$set(document = function(x) {prev_doc_hook(append(x, txt))});之后使用knitr::knit(inputFile);,会追加文本(hello),但是输出的md文件中的code chunks没有code fences(格式不好) .

在此的帮助下。

正确的做法是在knitr::knit_hooks$set之后使用knitr::knit(inputFile);。 code-fences的代码格式,在调用knit_hooks前添加render_markdown();.

所以正确的代码是-

---
title: "A title"
excerpt: "Excerpt"
output:
  md_document:
    pandoc_args: ["--wrap=none"]
    variant: gfm+footnotes
    preserve_yaml: TRUE
knit: (function(inputFile, encoding) {
  txt <- "hello";
  render_markdown(); # This is the modified line
  prev_doc_hook <- knitr::knit_hooks$get("document");
  knitr::knit_hooks$set(document = function(x) {prev_doc_hook(append(x, txt))});
  knitr::knit(inputFile)
 })
date: "2021/03/07"
---