如何在R/Exams中调整SVG文件的缩放比例?
解决R/Exams中SVG无法缩放的问题
在Windows系统的RStudio里使用R/Exams时,通过\includegraphics[scale]调整SVG图片缩放比例没效果,核心原因是LaTeX的graphicx包对SVG格式的原生支持有限,推荐试试下面几种方案:
方案1:转SVG为PDF后再缩放(最稳定)
LaTeX对PDF图片的缩放支持更可靠,用rsvg包将SVG转成PDF后再引入:
- 先安装依赖包:
install.packages("rsvg")
- 修改你的试题代码:
<<echo=FALSE, results=hide>>= # 下载SVG文件并转换为PDF svg_path <- "atom.svg" download.file("https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/atom.svg", svg_path) rsvg::rsvg_pdf(svg_path, "atom.pdf") include_supplement("atom.pdf", recursive = TRUE) @ \begin{question} 2加1等于多少? \includegraphics[scale = 0.1]{atom.pdf} \begin{answerlist} \item 1 \item 2 \item 3 \end{answerlist} \end{question} \extype{schoice} \exsolution{001} \exshuffle{3}
方案2:手动修改SVG文件的尺寸属性
直接编辑SVG文件,调整根标签<svg>的尺寸参数:
- 找到
<svg>标签里的viewBox属性(比如原属性为viewBox="0 0 100 100"),把后两个数值乘以缩放比例,比如改成viewBox="0 0 10 10"就能缩小到原尺寸的1/10; - 或者直接修改
width和height属性,比如设为width="10px" height="10px"。
修改完成后,用\includegraphics引入时无需加scale参数,直接使用修改后的SVG即可。
方案3:用R代码自动修改SVG尺寸
如果不想手动编辑文件,用xml2包批量修改SVG的尺寸属性:
- 安装依赖包:
install.packages("xml2")
- 修改试题代码:
<<echo=FALSE, results=hide>>= library(xml2) svg_path <- "atom.svg" download.file("https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/atom.svg", svg_path) # 读取SVG文件并调整尺寸 svg <- read_xml(svg_path) view_box <- xml_attr(svg, "viewBox") if (!is.na(view_box)) { # 基于viewBox缩放 vb_vals <- as.numeric(strsplit(view_box, " ")[[1]]) vb_vals[3:4] <- vb_vals[3:4] * 0.1 # 缩放比例0.1 xml_attr(svg, "viewBox") <- paste(vb_vals, collapse = " ") } else { # 直接修改width/height xml_attr(svg, "width") <- as.numeric(xml_attr(svg, "width")) * 0.1 xml_attr(svg, "height") <- as.numeric(xml_attr(svg, "height")) * 0.1 } # 保存修改后的SVG write_xml(svg, "atom_scaled.svg") include_supplement("atom_scaled.svg", recursive = TRUE) @ \begin{question} 2加1等于多少? \includegraphics{atom_scaled.svg} \begin{answerlist} \item 1 \item 2 \item 3 \end{answerlist} \end{question} \extype{schoice} \exsolution{001} \exshuffle{3}
提示:优先选方案1,因为PDF格式在LaTeX环境中的兼容性最好,几乎不会出现缩放失效的问题。
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

