代码之家  ›  专栏  ›  技术社区  ›  blahdiblah

在R pdf输出中抑制或设置CreationDate/ModDate

r svn
  •  4
  • blahdiblah  · 技术社区  · 17 年前

    当R使用pdf()创建pdf时,它在pdf中包含CreationDate和ModDate。我在svn存储库中有许多这样生成的PDF,其效果是,当R重新生成图形时,即使使用相同的数据,它们也会显示为已修改(正确地说)到svn。让这两个人配合得很好的最好方法是什么?

    我可以简单地从R之外的PDF中删除这些行,但是这个额外的步骤是不可取的。

    我甚至可以说服svn使用一个专门的diff,它忽略了这些行上的更改,但这听起来似乎比它的价值更麻烦。

    2 回复  |  直到 17 年前
        1
  •  3
  •   vrajs5    12 年前

    我同意Tal的观点,生成的文件不应该在版本控制中。

    关于你最初的问题,我认为答案是不,你不能阻止R这么做。我在R pdf帮助文件中没有发现此类选项, http://www.r-cookbook.com/rhelp/pdf.html

    如果您查看R中的pdf函数(只需执行“pdf”而不带任何括号的代码打印输出),它实际上会创建pdf文件,并调用:

    .External(PDF, file, old$paper, old$family, old$encoding, old$bg, old$fg, 
          old$width, old$height, old$pointsize, onefile, old$pagecentre, old$title, 
          old$fonts, version[1L], version[2L], old$colormodel, old$useDingbats,
          old$useKerning)
    

        2
  •  1
  •   Tal Pressman    17 年前

    虽然这实际上并不能回答您的问题,但通常最好将自动生成的文件从源代码管理中排除,正是出于这个原因。

        3
  •  0
  •   bers    6 年前

    这既不优雅,也不可取。很多事情都可能出错或被利用。但这对我很有效。

    我只是用 pdf_on 而不是 pdf pdf_off 而不是 dev.off .

    pdf_on <- function(...) {
        field <- "(\\s*/(Creation|Mod)Date)"
        value <- "\\(D:[0-9]{14}(.[0-9]{2}.[0-9]{2}.?)?\\)"
        from <- paste0("^", field, " ", value, "$")
        to <- "\\1 (D:19700101000000)"
        file <- list(...)[[1]]
        pdf_cmd <<- paste0("sed -E 's_", from, "_", to, "_' -i ", file)
        return(pdf(...))
    }
    pdf_off <- function(...) {
        ret <- dev.off(...)
        Sys.sleep(0.1)
        system(pdf_cmd)
        return(ret)
    }