varias style img graficos graficas r emacs latex org-mode sweave

style - R+Org-modo: ¿cómo evitar nombrar archivos de trazado?



text panel shiny (3)

Cuando uso Sweave con R , puedo evitar nombrar explícitamente los archivos de trazado simplemente encerrando los comandos de trazado en un fragmento de código como <<fig=TRUE>> ... @ . El controlador Sweave genera automáticamente archivos de fig1.pdf numerados como fig1.pdf , fig2.pdf , etc.

Sin embargo, en org-mode , parece que necesito nombrar explícitamente el archivo de figura usando un :file [...].pdf en el encabezado, por ejemplo

#+attr_latex: width=8cm placement=[htbp] #+begin_src R :results output graphics :exports results :file fig.pdf require(ggplot2) a <- rnorm(100) b <- 2*a + rnorm(100) d <- data.frame(a,b) ggplot(d,aes(a,b)) + geom_point() #+end_src

¿Hay alguna manera de evitar nombrar explícitamente el archivo de trazado y hacer que el motor de exportación de látex en modo org genere estos nombres de archivo?

Actualización: Incluyo la solución que G. Jay Kerns señaló aquí para una referencia fácil: todo lo que necesita hacer es incluir una función emacs-lisp generadora de archivos temporales en el encabezado, como :file (org-babel-temp-file "./figure-" ".pdf") . Esto crea un archivo de figura temporal en el directorio actual (debido a ./ ). Si desea el archivo de figura temporal en un directorio temporal global (definido por la variable org-babel-temporary-directory ), simplemente diga ".figure" :

#+attr_latex: width=8cm placement=[htbp] #+begin_src R :results output graphics :exports results :file (org-babel-temp-file "./figure-" ".pdf") require(ggplot2) a <- rnorm(100) b <- 2*a + rnorm(100) d <- data.frame(a,b) ggplot(d,aes(a,b)) + geom_point() #+end_src


Aquí hay otro enfoque utilizando un incrementador, como el uso de

(org-babel-temp-file "./figure-" ".pdf")

no parece funcionar para mi

(setq i 0) #+begin_src R :file (concat "f" (number-to-string (incf i)) ".pdf") :results output graphics :exports results (plot (rnorm(10)) #+end_src

(setq i) solo necesita llamarse una vez por sesión para definir la variable; luego se puede borrar. Las gráficas se guardan en su default-directory y aparecen automáticamente al exportar el archivo .org a .tex usando (org-latex-export-as-latex) .


Gran pregunta, y otra similar (más algunas cosas adicionales) apareció en la lista de correo del modo Org en septiembre. La pregunta original está here , y un esbozo de una posible solución se encuentra en el mensaje final del hilo here (ver # 1, los otros elementos tratan sobre otras cosas).


Hice una función lisp a continuación. Esta función tiene 2 argumentos: DIRNAME y FNAME "fname". Esta función genera una ruta DIRNAME / FNAME ##. Png, donde ## es un número secuencial en el directorio. Por ejemplo, si hay fig1.png fig2.png fig4.png y le das a fig como FNAME, esta función devuelve fig3.png (número faltante). Si hay fig1.png fig2.png fig3.png, esto devuelve fig4.png. Si no hay archivos, esto devuelve fig1.png.

(defun search-file-name (dirname fname) "This function generates a path DIRNAME/FNAME##.png, where ## is a sequencial number in the directory. For example, if there are fig1.png fig2.png fig4.png and you give fig as FNAME, this function returns fig3.png(missing number). If there are fig1.png fig2.png fig3.png, this returns fig4.png. If there are no files, this returns fig1.png." (setq string (directory-files dirname nil (concat fname "[0-9]+//.png") t)) (if (not string) (concat dirname fname "1.png") (progn (setq number-list (mapcar ''(lambda (x) (string-match (concat fname "//([0-9]+//)//.png") x) (match-string 1 x)) string)) (setq w1 (sort (mapcar ''parse-integer number-list) ''<)) (setq missing nil) (loop for j from 1 to (length w1) do (if (not (equal j (elt w1 (- j 1)))) (progn (setq missing j) (return missing)))) (if (not missing) (setq missing (+ 1 (car (last w1))))) (concat dirname fname (number-to-string missing) ".png")))) (setq missing nil) (loop for j from 1 to (length w1) do (if (not (equal j (elt w1 (- j 1)))) (progn (setq missing j) (return missing)))) (if (not missing) (setq missing (+ 1 (car (last w1))))) (concat dirname fname (number-to-string missing) ".png"))))