Пользовательское графическое устройство в Sweave

Моя проблема с вставкой PDF-изображения со специальным символом в документ Sweave была решена путем создания pdf-графика вне самого Sweave и последующего его импорта.

Следуя документации 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}

введите описание изображения здесь

1 ответ

Решение

@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}
Другие вопросы по тегам