Пользовательское графическое устройство в 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 mycairon")
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 любезно предложил мне преобразовать ответ, данный в его комментарии, в официальный.
Достаточно включить расширение файла
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}