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

Parameterize path for `reference_docx` in a Rmarkdown document with `rmarkdown::word_document` output format

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

但是,似乎此功能不适用于 reference_docx 选项,因为表达式传递给输出格式函数的参数(rmarkdown::word_document,或 bookdown::word_document2 matter) 按字面解释而不是求值。参见例如这个最小的代表:

---
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 中所述):

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

关于如何解决这个问题有什么想法吗?非常感谢!!

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

Finally, params (the list of parameters provided within the knitting environment) is not available for yaml expressions.

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

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

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

Some markdown stuff