Rainer M Krug <rai...@krugs.de> writes: > On 01/20/14, 15:00 , Andreas Leha wrote: >> Rainer M Krug <rai...@krugs.de> writes: >> >>> Hi >>> >>> I have two suggestions which are liked to each other. They are >>> based on R code blocks, but the should be useful for other >>> languages as well. >>> >>> I have a document in which I use :session for creating R graphs. >>> These look like: >>> >>> #+begin_src R :file Correlation_1.pdf :results graphics IFN.mean >>> <- load.IFN.mean() grid <- load.grid.CASTANEA.average() >>> image(IFN.mean) #+end_src >>> >>> Everything works fine, unless there is an error in one graph. >>> >>> In this case, the device remains open, which leaves open devices >>> at the end of the export of the document. >> >> I experience the same problem. And would love to see that >> addressed. > > Just checked in the code from ob-R.el, and it should not be to difficult: > > The functions > org-babel-R-construct-graphics-device-call > and > org-babel-expand-body:R > > would be affected. > > I changed : > > > > ... Trying it out ... > > This seems to be working - I just changed it and it closes the device. > But further tests are needed. I will leave it to see if anything > unexpected happens. >
Sounds great. When you're confident that this is working please submit a patch and I'll be happy to apply it. Thanks, > > If somebody could look if this makes sense? > (defun org-babel-expand-body:R (body params &optional graphics-file) > "Expand BODY according to PARAMS, return the expanded body." > (let ((graphics-file > (or graphics-file (org-babel-R-graphical-output-file params)))) > (mapconcat > #'identity > (let ((inside > (append > (when (cdr (assoc :prologue params)) > (list (cdr (assoc :prologue params)))) > (org-babel-variable-assignments:R params) > (list body) > (when (cdr (assoc :epilogue params)) > (list (cdr (assoc :epilogue params))))))) > (if graphics-file > (append > (list (org-babel-R-construct-graphics-device-call > graphics-file params)) > inside > ;; my edits > (list "},error=function(e){plot(-1:1, -1:1, type='n'); > text(0,0,'DUMMY')}); dev.off()")) > inside)) > ;; end > "\n"))) > > > > and > > (format "%s(%s=\"%s\"%s%s%s); tryCatch({" > device filearg out-file args > (if extra-args "," "") (or extra-args "")))) > > in org-babel-R-construct-graphics-device-call > > It is working with the Dummy. > > Could somebody please check if this is working? > > I am leaving my changes and will see during my work if it is fine. > > Cheers, > > Rainer > > >> >>> >>> If the code block which should create the graph would be wrapped >>> into a try() block, so that it would look like the following: >>> >>> try( { pdf("./Correlation_1.pdf") IFN.mean <- load.IFN.mean() >>> grid <- load.grid.CASTANEA.average() image(IFN.mean) } ) >>> dev.off() >>> >>> The device would be closed even if an error occurred during the >>> execution of the code. >>> >>> But still, when exporting to pdf, the call to pdflatex fails as >>> only a empty pdf is available. So it becomes necessary to go >>> through the pdf log to identify the graphs which failed. >>> >>> In this case it would be useful, to have a placeholder grah in >>> the final pdf, so that one can see which graphs did not work. >>> >>> In addition, this could be used as placeholders (well - they are >>> placeholders) for to be created graphs, while the text has >>> already been written. >>> >>> So my second suggestion would be to include a placeholder image, >>> which would be used if the generation of the actual graph fails. >>> It would be great (but not necessary) if the actual error >>> message would be in the image. >> >> Such an place holder image would be great, indeed. >> >> >> Thanks for bringing this up! >> >> Regards, Andreas >> >> > > -- > Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation > Biology, UCT), Dipl. Phys. (Germany) > > Centre of Excellence for Invasion Biology > Stellenbosch University > South Africa > > Tel : +33 - (0)9 53 10 27 44 > Cell: +33 - (0)6 85 62 59 98 > Fax : +33 - (0)9 58 10 27 44 > > Fax (D): +49 - (0)3 21 21 25 22 44 > > email: rai...@krugs.de > > Skype: RMkrug -- Eric Schulte https://cs.unm.edu/~eschulte PGP: 0x614CA05D