Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R+;组织模式:如何避免命名打印文件?_R_Emacs_Latex_Org Mode_Sweave - Fatal编程技术网

R+;组织模式:如何避免命名打印文件?

R+;组织模式:如何避免命名打印文件?,r,emacs,latex,org-mode,sweave,R,Emacs,Latex,Org Mode,Sweave,当我将swave与R一起使用时,我可以通过简单地将plot命令封装在类似的代码块中来避免显式命名plot文件@。swave驱动程序自动生成编号的绘图文件,如fig1.pdf、fig2.pdf等 然而,在org模式下,我似乎需要在标题中使用:file[…]pdf来明确命名地物文件,例如 #+attr_latex: width=8cm placement=[htbp] #+begin_src R :results output graphics :exports results :file fig.

当我将
swave
R
一起使用时,我可以通过简单地将plot命令封装在类似
的代码块中来避免显式命名plot文件@
swave
驱动程序自动生成编号的绘图文件,如
fig1.pdf
fig2.pdf

然而,在
org模式下
,我似乎需要在标题中使用
:file[…]pdf
来明确命名地物文件,例如

#+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                                     

这是一个很好的问题,在9月份的组织模式邮件列表中出现了一个类似的问题(加上一些额外的东西)。最初的问题是,一个可能的解决方案的草图存在于线程的最终消息中(请参见#1,其他项目是关于其他事情的)。

这里是另一种使用增量的方法,如使用

(org babel临时文件“/figure-”.pdf”)

似乎对我不起作用:

(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)
每个会话只需调用一次即可定义变量;然后可以将其删除。
绘图保存到您的
默认目录
,并在使用
(org latex export as latex)
.org
文件导出到
.tex
时自动显示。 此函数有两个参数DIRNAME和FNAME“FNAME”。 此函数生成路径DIRNAME/FNAME##.png, 其中##是目录中的顺序号。 例如,如果有fig1.png fig2.png fig4.png和 如果将fig指定为FNAME,则此函数将返回fig3.png(缺少的数字)。 如果存在fig1.png fig2.png fig3.png,则返回fig4.png。 如果没有文件,则返回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"))))
(定义搜索文件名(dirname fname)
“此函数生成路径DIRNAME/FNAME##.png,
其中##是目录中的顺序号。
例如,如果有fig1.png fig2.png fig4.png和
如果将fig指定为FNAME,则此函数将返回fig3.png(缺少的数字)。
如果存在fig1.png fig2.png fig3.png,则返回fig4.png。
如果没有文件,则返回fig1.png。“
(setq字符串(目录文件dirname nil(concat fname“[0-9]+\\\.png”)t))
(如果(不是字符串)(concat dirname fname“1.png”)
(项目
(setq编号列表)
(地图车)(λ(x)
(字符串匹配(concat fname“\\([0-9]+\\)\\.png”)x)
(匹配字符串1 x))
(字符串)

(setq w1(sort(mapcar‘parse integer number list’)我改进了使行为真正自动化的方法。基本上,下面的代码包括一个块,该块创建一个lisp变量,然后将该变量提供给所有图形块

此elisp块应放在文件的开头(至少在任何图形块之前)

#+名称:fignumber
#+begin_src emacs lisp:results值静默:导出无:会话
(setq fignumber 0)
#+结束(src)
#+BEGIN_SRC R:results输出图形文件:文件(concat“figure”(数字到字符串(incf fignumber)).pdf”):导出结果:会话

所选答案在缓冲区内运行良好,但由于临时文件的原因,我在导出为pdf时遇到问题。我更喜欢此答案,因为它适用于pdf导出,并将数字保存在工作目录中。
(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"))))
#+name: fignumber 
#+begin_src emacs-lisp :results value silent :exports none :session 
(setq fignumber 0)
#+end_src

#+BEGIN_SRC R :results output graphics file :file (concat "figure" (number-to-string (incf fignumber)) ".pdf") :exports results :session
x <- 1:100
y <- 1:100
plot(x,y)
#+END_SRC