如何判断officedown::rdocx_document输出以设置RMarkdown图尺寸?
针对不同RMarkdown输出格式设置图表尺寸的解决方案
问题背景
需要为两种RMarkdown输出格式分别配置不同的图表尺寸:
- 输出为
bookdown::html_document2时使用一套尺寸 - 输出为
officedown::rdocx_document时使用另一套尺寸
当前实现中,knitr::is_html_output()能正常识别HTML输出并生效,但原使用knitr::is_latex_output()判断Word输出完全不匹配;尝试knitr::pandoc_to("docx")时,渲染officedown::rdocx_document会触发Error: pandoc document conversion failed with error 1错误。
可行解决方案
方法1:读取pandoc目标格式变量
直接读取rmarkdown渲染时设置的rmarkdown.pandoc.to变量,该变量能准确反映最终输出格式,且不会触发报错:
# 配置HTML输出的图表尺寸 if (knitr::is_html_output()) { knitr::opts_chunk$set(fig.width = 8, fig.height = 5, fig.retina = 2) } # 配置officedown Word输出的图表尺寸 if (identical(knitr::opts_knit$get("rmarkdown.pandoc.to"), "docx")) { knitr::opts_chunk$set(fig.width = 6, fig.height = 4) }
方法2:检查输出格式对象的类
通过判断输出格式对象的类来识别officedown::rdocx_document,适合需要精准匹配该格式而非所有docx输出的场景:
# 获取当前文档的输出格式配置 output_format <- rmarkdown::metadata$output[[1]] # 配置HTML输出的图表尺寸 if (knitr::is_html_output()) { knitr::opts_chunk$set(fig.width = 8, fig.height = 5, fig.retina = 2) } # 配置officedown Word输出的图表尺寸 if (inherits(output_format, "rdocx_document")) { knitr::opts_chunk$set(fig.width = 6, fig.height = 4) }
完整测试示例
--- title: "图表尺寸适配测试" output: bookdown::html_document2: default officedown::rdocx_document: default --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) # 适配HTML输出 if (knitr::is_html_output()) { knitr::opts_chunk$set(fig.width = 8, fig.height = 5, fig.retina = 2) } # 适配officedown Word输出 if (identical(knitr::opts_knit$get("rmarkdown.pandoc.to"), "docx")) { knitr::opts_chunk$set(fig.width = 6, fig.height = 4) }
测试图表
plot(mtcars$wt, mtcars$mpg, main = "车重与油耗关系")
## 环境信息示例 ```r sessionInfo() # R version 4.3.1 (2023-06-16) # Platform: x86_64-w64-mingw32/x64 (64-bit) # Running under: Windows 10 x64 (build 19045) # # attached base packages: # [1] stats graphics grDevices utils datasets methods base # # other attached packages: # [1] officedown_0.3.2 bookdown_0.36 rmarkdown_2.24 # # loaded via a namespace (and not attached): # [1] digest_0.6.33 R6_2.5.1 jsonlite_1.8.7 magrittr_2.0.3 # [5] evaluate_0.21 stringi_1.7.12 cachem_1.0.8 rlang_1.1.1 # [9] cli_3.6.1 stringr_1.5.0 xfun_0.39 yaml_2.3.7 # [13] tools_4.3.1 htmltools_0.5.5 knitr_1.43
内容的提问来源于stack exchange,提问作者user63230
相关产品推荐
相关产品推荐

