Sweave

时间:2015-07-04 14:01:02

标签: r pdf graphics utf-8 sweave

我的problem of inserting a pdf graphic with a special character in a Sweave document已经通过在Sweave本身之外创建pdf图然后导入它来解决。

根据Sweave文档,我编写了一个自定义图形设备,它应该以完全相同的方式构建pdf图形。但它不起作用。你能解释一下为什么下面的Sweave文档的第二个图形不起作用,而它应该与第一个完全相同吗?我错了相信它应该吗?

\documentclass{article}

\begin{document}
\SweaveOpts{concordance=TRUE}

<<setup, echo=FALSE>>=
mycairo <- function(name, width = 7, height = 7, ...) { 
  grDevices::cairo_pdf(name, width = width, height = height)
}
mycairo.off <- function() {
    cat("shutting down mycairo\n")
    invisible(grDevices::dev.off())
}
@

\section{Export plot}

<<Export_plot, echo=FALSE>>=
cairo_pdf("exported_plot.pdf")
par(mar=c(6,7,0,6))
ylab <- expression(paste("", bar(italic("\u2113")), "(",phi[0], "|", italic(list(x,y)), ")"))
plot(0,0, ylab=ylab, xlab=NA, cex.lab=3)
invisible(dev.off())
@

% insert exported plot 
\includegraphics[width=6cm]{exported_plot.pdf}


\section{Direct plot}

<<mycairo_plot, echo=FALSE,  fig=TRUE, pdf=TRUE, grdevice=mycairo, width=4, height=4>>=
par(mar=c(6,6,0,6))
ylab <- expression(paste("", bar(italic("\u2113")), "(",phi[0], "|", italic(list(x,y)), ")"))
plot(0,0, ylab=ylab, xlab=NA, cex.lab=1)
@


\end{document}

enter image description here

1 个答案:

答案 0 :(得分:3)

@ user20650恳请我将他/她评论中给出的答案转换为官方评论。

pdf函数中包含cairo_pdf文件扩展名就足够了。然后将mycairo函数替换为:

mycairo <- function(name, width = 7, height = 7, ...) { 
  grDevices::cairo_pdf(sprintf("%s.pdf", name), width = width, height = height)
}

作为旁注,您可以将其设置为全局选项,而不是在每个图块中指定grdevice=mycairo

\SweaveOpts{grdevice=mycairo}