我试图在具有 reference_docx
输出格式的 Rmarkdown 文档中使用 rmarkdown::word_document
的参数化路径,类似于例如已为参考书目文件完成 here(参考书目和引文 YAML 选项部分)。
但是,似乎此功能不适用于 reference_docx
选项,因为表达式传递给输出格式函数的参数(rmarkdown::word_document
或 bookdown::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
关于如何解决这个问题的任何想法?非常感谢!!
答案 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