2015-07-04 2 views
4

My problem of inserting a pdf graphic with a special character in a Sweave document было решено, создав pdf-файл за пределами Sweave и импортировав его.Пользовательское графическое устройство в 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} 

enter image description here

+0

изменения 'mycairo' в' grDevices :: cairo_pdf (вставка (имя, "pdf", sep = "."), width = width, height = height) '. Ive не сделал этого раньше, но ['my.Swd' отсюда] (https://stat.ethz.ch/R-manual/R-devel/library/utils/html/RweaveLatex.html), как представляется, делает это – user20650

+0

@ user20650 Да, это работает !! Не стесняйтесь конвертировать свой комментарий в ответ, чтобы я принял его. –

+2

Хороший материал, Стефан - пожалуйста, напишите его ... вы сделали тяжелую работу, написав хороший вопрос – user20650

ответ

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} 
Смежные вопросы