如何让R/exams习题根据导出格式自动选择SVG/PNG图片?
实现exams2html/exams2pdf自动切换SVG/PNG图片
方法1:动态生成图片引用代码
在习题的R代码块中,通过检测当前输出格式,自动拼接对应图片的Markdown引用:
# 获取当前输出目标格式 output_format <- knitr::opts_knit$get("rmarkdown.pandoc.to") # 根据格式选择图片后缀 img_ext <- ifelse(output_format == "html", "svg", "png") # 生成图片引用语句 cat(sprintf('{width="40%%"}', img_ext))
方法2:自定义绘图钩子(适用于代码内绘图场景)
如果是在习题代码中直接生成图形,而非预先导出好SVG/PNG文件,可以通过自定义knitr绘图钩子,自动根据输出格式选择保存的图片格式:
# 覆盖默认绘图钩子 knitr::knit_hooks$set(plot = function(x, options) { output_type <- knitr::opts_knit$get("rmarkdown.pandoc.to") # 判断格式并替换图片后缀 if (output_type == "html") { gsub("\\.png", "\\.svg", knitr::hook_plot_md(x, options)) } else { knitr::hook_plot_md(x, options) } }) # 示例绘图代码 plot(rnorm(100), main = "示例图")
注意事项
- 预先导出的SVG和PNG文件需保证文件名一致(仅后缀不同),且与习题文件处于同一目录
- 自定义钩子需放在习题开头的R代码块中,确保在执行绘图代码前生效
内容的提问来源于stack exchange,提问作者Bruce James
相关产品推荐
相关产品推荐

