如何使用bookdown(包括SVG图像)制作PDF
我有一些R标记,包括以下代码:如何使用bookdown(包括SVG图像)制作PDF,svg,latex,bookdown,Svg,Latex,Bookdown,我有一些R标记,包括以下代码: ```{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生
```{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错误:未知的图形扩展名:.svg。
这是可以理解的,因为knitr使用Latex的\includegraphics{images/Huff-2009-fig5.1.svg}
来包含图像。所以,它本身不是一个bug
有没有更好的方法来包含SVG图像,这样我就不需要将其预处理为PDF或PNG?您可以创建一个帮助函数来将SVG转换为PDF。例如,如果安装了系统包
rsvg convert
,则可以使用此功能包括SVG图形:
include_svg=函数(路径){
if(knitr::is_latex_output()){
output=xfun::with_ext(路径'pdf')
#如果需要,您可以将pdf的时间戳与svg进行比较,以避免转换
system2('rsvg-convert',c('-f',pdf','-a','-o',shQuote(c(输出,路径)))
}否则{
输出=路径
}
knitr::包含图形(输出)
}
您还可以考虑像
pdf
以来,svg发生了更改时才会重新生成,因此这是一种加快执行时间的好方法。