最近更改后,RMarkdown 图形呈现为 HTML 而不是 SVG

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

我正在使用 RMarkdown 和 knit 生成 HTML 文档。我之前使用此 yaml 和块选项将所有

ggplot2
图形设置为渲染为 SVG:

output:
  html_document:
    self_contained: yes

knitr::opts_chunk$set(dev = 'svglite', fig.ext = 'svg')

这曾经工作得很好,我可以右键单击图形将它们另存为 SVG。然而,最近,这些图形似乎被渲染为 HTML 而不是 SVG,现在我无法再右键单击它们进行保存,而且图形中的文本是可选的。此外,某些数字未正确渲染,例如某些误差线超出了绘图边缘。

我发现当我设置

self_contained: no
时,SVG 会正确渲染,但仍然能够使用
self_contained: yes
对我来说至关重要。

此外,我注意到,以前,SVG 被渲染为

<img>
元素,其中
src
属性指向 SVG 文件的 base64 编码版本。但是,现在使用
<svg>
标签直接嵌入图形,这改变了浏览器处理它们的方式,使 SVG 成为 HTML 结构的一部分,而不是单独的图像文件。

此问题似乎与 Pandoc (2.19+) 中的 最近更新有关。

如何恢复到以前的行为,将图形另存为可以右键单击并保存的独立 SVG 文件?

r svg r-markdown knitr
1个回答
0
投票

内联 SVG 在

Pandoc 3.1.6
中替换了 SVG 图像的 data URI,在 3.2.1 中,他们引入了
inline-svg
类来控制此行为,并默认返回到
data
URI。当前的 RStudio(2024.09 和 2024.11 dailies)仍然捆绑 Pandoc 3.2,但您可能只需手动替换 pandoc 二进制文件。

或者也许通过

pandoc
包安装并使用 3.2.1,如 https://bookdown.org/yihui/rmarkdown-cookbook/install-pandoc.html :

中所述
pandoc::pandoc_install("3.2.1")
pandoc::with_pandoc_version(
  version = '3.2.1',
  rmarkdown::render('rmd_svglite.Rmd')
)

img
在结果文档中:

<img role="img" src="data:image/svg+xml;base64,PD94...==" width="672">

rmd_svglite.Rmd供参考:

---
output:
  html_document:
    self_contained: yes
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, dev = 'svglite', fig.ext = 'svg')
library(ggplot2)
```

```{r pressure, echo=FALSE}
pressure |> 
  ggplot(aes(temperature, pressure)) +
  geom_point()
```
© www.soinside.com 2019 - 2024. All rights reserved.