如何在 YAML 标头中动态设置 Rmarkdown 输出模板文件作为包的一部分?

问题描述 投票:0回答:1

我有一个包,可以将 data.frames 保存为 Word 文件中的格式化表格,但我在使用除默认的 Word 模板之外的任何内容时遇到问题。在我的函数中,我使用如下方式调用

rmarkdown::render

rmarkdown::render(system.file("rmarkdown/templates/savemytable/skeleton/skeleton.Rmd",
                                package="mypackage")
                    quiet = TRUE)
  

这是调用的 sculpture.Rmd 文件的 YAML 标头:

---
date: "Compiled on `r format(Sys.time(), '%B %d, %Y')`"
output: word_document
---

我想在我的包中包含一个模板 Word 文件,以便人们可以横向保存它,因此我在

inst
文件夹中保存了一个模板 Word 文件,其路径如下:

 inst/Word/landscape_report_template.dotx

如果我运行这个:

 system.file("Word/landscape_report_template.dotx",
                              package="mypackage")

这让我获得了 Landscape_report_template.dotx 的文件路径,所以看起来这部分工作正常。但是,我不知道如何调整 YAML 标头的输出部分以获取除硬编码文件路径之外的任何内容。这有效:

 output: 
  word_document:
        reference_docx: "C:/Users/myname/mypackage/inst/Word/landscape_report_template.dotx"

但这显然对其他用户不起作用。我尝试了以下方法,结果都是

"Error: pandoc document conversion failed with error 99".

 output: 
  word_document:
        reference_docx: !r system.file("Word/landscape_report_template.dotx",
                          package="mypackage")


 output: 
  word_document:
        reference_docx: "`r system.file("Word/landscape_report_template.dotx",
                          package="mypackage")`"

以及插入“或`的位置的一些其他变体,以尝试获得我想要的内容。如何动态指定reference_docx文件的路径?

r r-markdown
1个回答
0
投票

据我所知,这个过程需要的是word文档,而不是word模板。请尝试使用word文档(docx)而不是word模板(dotx)作为参考文档。

output: 
  word_document:
        reference_docx: "C:/Users/myname/mypackage/inst/Word/landscape_report_template.docx"

应该适合你的情况。

但是有两个要求:

(A) 您必须仅通过 pandoc 生成此文档。这意味着您必须首先将一些虚拟内容放入一个 RMarkdown 文档中,然后将其呈现为 Word 文档。该文档可以作为您的reference_docx。

(B) 您必须使用 Microsoft Word 中的内置样式。在上述步骤中渲染文档后,您可以更改渲染文档中的内置样式(例如,标题 1、标题 2 等)。

如果您仍然遇到任何问题,请提出新问题。

© www.soinside.com 2019 - 2024. All rights reserved.