如何使用包含SVG图像的预订制作PDF

时间:2018-05-04 00:12:31

标签: svg latex bookdown

我有一些R markdown,其中包含以下代码:

```{r huff51, fig.show='hold', fig.cap='Design decisions connecting research purpose and outcomes [@huff_2009_designingresearchpublication p. 86].', echo=FALSE}

knitr::include_graphics('images/Huff-2009-fig5.1.svg')
```

使用bookdown生成HTML输出时,一切都按预期工作。

使用bookdown生成PDF输出时,出现错误! LaTeX Error: Unknown graphics extension: .svg.

这是可以理解的,因为knitr使用Latex的\includegraphics{images/Huff-2009-fig5.1.svg}来包含图像。所以,这本身并不是一个错误。

是否有更好的方法来包含SVG图像,因此我不需要将其预处理为PDF或PNG?

1 个答案:

答案 0 :(得分:0)

您可以创建一个辅助函数,将SVG转换为PDF。例如,如果您安装了系统软件包rsvg-convert,则可以使用此功能包括SVG图形:

include_svg = function(path) {
  if (knitr::is_latex_output()) {
    output = xfun::with_ext(path, 'pdf')
    # you can compare the timestamp of pdf against svg to avoid conversion if necessary
    system2('rsvg-convert', c('-f', 'pdf', '-a', '-o', shQuote(c(output, path))))
  } else {
    output = path
  }
  knitr::include_graphics(output)
}

您还可以考虑使用 magick (基于ImageMagick)之类的R包将SVG转换为PDF。