You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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('![](myplot.%s){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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 00:10:57