Пользовательское графическое устройство в 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}