使用 `rmarkdown::word_document` 输出格式在 Rmarkdown 文档中参数化 `reference_docx` 的路径

时间:2021-05-19 15:30:20

标签: r yaml r-markdown knitr

我试图在具有 reference_docx 输出格式的 Rmarkdown 文档中使用 rmarkdown::word_document 的参数化路径,类似于例如已为参考书目文件完成 here参考书目和引文 YAML 选项部分)。

但是,似乎此功能不适用于 reference_docx 选项,因为表达式传递给输出格式函数的参数(rmarkdown::word_documentbookdown::word_document2 就此而言)被逐字解释而不是被评估。见例如这个最小的reprex:

  • 工作示例:
---
params:
  ref: www/Template_doc.docx
output:
  word_document:
    reference_docx: www/Template_doc.docx
---

Some markdown stuff

  • 等效的非工作示例:
---
params:
  ref: www/Template_doc.docx
output:
  word_document:
    reference_docx: "`r params$ref`"
---

Some markdown stuff

此示例在尝试编织时出现以下错误:

pandoc.exe: `r params$ref`: openBinaryFile: does not exist (No such file or directory)

也就是说,它尝试完全使用 `r params$ref` 作为文件名,而不是评估 params$ref

我也尝试过(如 this answer 中所述):

  • !r params$ref:它显然完全忽略了 !r 并认为 params$ref 是预期的文件名

  • !expr params$ref:它给出以下错误:

Error: object 'params' not found
Error in yaml::yaml.load(..., eval.expr = TRUE) : 
  Could not evaluate expression: params$ref
Calls: <Anonymous> ... parse_yaml_front_matter -> yaml_load -> <Anonymous>
Execution halted

关于如何解决这个问题的任何想法?非常感谢!!

1 个答案:

答案 0 :(得分:1)

显然,问题在于尝试从 params 标头本身访问 yaml。如here所述,

<块引用>

最后,params(编织环境中提供的参数列表)不适用于 yaml 表达式。

除此之外,字段 reference_docx 可以以与其他 yaml 头字段 see e.g. 相同的方式计算表达式。

因此,我自己的(工作)示例适用于此,将是:

---
params:
  ref: www/Template_doc.docx
output:
  word_document:
    reference_docx: !expr file.path("www", "Template_doc.docx")
---

Some markdown stuff

相关问题