【问题标题】:Recommendations for developing Sweave documents开发 Sweave 文档的建议
【发布时间】:2009-09-04 14:17:06
【问题描述】:

我希望简化我的Sweave 文档创建,并且我想了解人们当前的设置。我觉得圣杯是这样的:

  • 编辑 Rnw 代码的一半 屏幕
  • 单键绑定编译 Sweave 文档并运行 pdflatex
  • 查看PDF 在屏幕的另一半;一次 编译后,PDF 会刷新并以您正在编辑的文档部分为中心
  • 如果编译有错误,请将 PDF 替换为编译结果(例如 Latex 错误或 Sweave 错误)

我猜测/希望解决方案是 Emacs/ESS 的一部分,结合了 Emacs 配置文件的一些代码和/或一个不错的 Makefile。但我真的很想听听每个人创建 Sweave 和/或 Latex 文档的首选方式。

【问题讨论】:

    标签: emacs r latex sweave ess


    【解决方案1】:

    我交谈过的其他一些 R 用户使用“每个项目一个目录”设置和一个简单的 Makefile。正如您所怀疑的,这适用于 Emacs/ESS。

    我倾向于只调用一个简单的 shell 脚本sweave,这是我在添加“R CMD Sweave”之前编写的(因为我发现重新创建或复制 Makefile 没有吸引力,YMMV)。我还使用 Emacs 和自动刷新的 pdf 查看器(如 okularkpdf)。 Emacs23 也可以直接预览 pdf 文件,但我的工作流程还没有切换到那个。

    edd@ron:~$ cat bin/sweave
    #!/bin/bash -e
    
    function errorexit () {
        echo "Error: $1"
        exit 1
    }
    
    function filetest () {
        if [ ! -f $1 ]; then
           errorexit "File $1 not found"
        fi
        return 0
    }
    
    
    if [ "$#" -lt 1 ]; then
        errorexit "Need to specify argument file"
    fi
    
    
    BASENAME=$(basename $1 .Rnw)
    
    RNWFILE=$BASENAME.Rnw
    filetest $RNWFILE
    echo "library(tools); Sweave(\"$RNWFILE\")" \
          | R --no-save --no-restore --slave
    
    LATEXFILE=$BASENAME.tex
    filetest $LATEXFILE && pdflatex $LATEXFILE
    

    【讨论】:

      【解决方案2】:

      您可以使用 Eclipse 的 StatET 插件执行您建议的所有操作。这就是我用于 Sweave 开发的方法;它非常了解latex和R,包括语法高亮等。

      您可以在这里获取:http://www.walware.de/goto/statet

      Longhow Lam 写了一篇不错的指南:http://www.splusbook.com/Rintro/R_Eclipse_StatET.pdf

      http://www.statalgo.com/?p=93

      【讨论】:

      • 我同意。 Sweave、StatET 和 Eclipse 可以很好地协同工作。我写了一篇文章,描述了一种使用 Eclipse 配置 Sweave 的方法 bit.ly/adfhZ1
      • (splusbook 链接已损坏。但是我用谷歌搜索了它,以下看似等效的替代方法对我有用:splusbook.com/RIntro/R_Eclipse_StatET.pdf
      【解决方案3】:

      我在 OS X 上使用TeXShop 来生成我所有的 LaTeX 和 Sweave 报告。对我来说,一个新的编译管道就像添加一个名为 Sweave.engine~/Library/TeXShop/Engines/ 的文件一样简单,其中包含以下内容:

      #!/usr/bin/env Rscript
      args <- commandArgs(T)
      
      fname <- strsplit(args[1],'\\.')[[1]][2]
      
      Sweave(paste(fname,'Rnw',sep='.'))
      
      system(paste('pdflatex',paste(fname,'tex',sep='.')))
      

      Sweave 现在是在 TeXShop 中编译文档的可选方法。我可以通过在文件顶部添加以下 TeX hash-bang 将其设置为文档的默认值:

      % !TEX TS-program = Sweave
      

      点击 Cmd-T 将排版文档 - pdf 会自动在单独的窗口中弹出。 TeXShop 还结合了SyncTeX 技术,因此 Rnw 源中的 Cmd-Click 将突出显示 PDF 窗口中的相应输出,PDF 窗口中的 Cmd-Click 将突出 Rnw 源中的相应输入。

      TeXShop 仅适用于 mac,但基于 Qt/poppler 的出色克隆 TeXworks 可用于 Linux、Windows 和 Mac,并支持许多相同的功能——包括 TeX hash-bangs 和 SyncTeX。 TeXworks 已经达到了一定的成熟度,它包含在 Windows 的 MikTeX 包的 2.8 版中。

      【讨论】:

      • 我喜欢直接使用Rscript!如此多的解决方案调用了一个 shell 来调用 R... 作为记录,用于处理文件扩展名的 strsplitpaste 不是必需的 - Sweavepdflatex 都会自动添加扩展名。
      • 我认为在我写这篇文章的时候这是必要的,因为 TeX Shop 将整个文件名 File.Rnw 传递给了引擎。 Sweave 可以接受,但 pdflatex 会窒息。
      • 所以 - 你说你有 .Rnw 和 .pdf 文件之间的 cmd-click。您是否也必须跳过这些箍:cameron.bracken.bz/…
      • 不,我没有——所以 SyncTeX 支持可能有点偏离。但我倾向于写很多小的 Sweave 块而不是小块,所以 SyncTeX 让我“在球场上”,我没有注意到与不使用索引相关的问题。
      【解决方案4】:

      试试RStudio

      我一直是EmacsTeXShop 的粉丝,正如之前的回答中提到的那样。

      但是,Rstudio 开始赢得我的青睐。这是一个快速改进的 R 专用 IDE。绝对值得一试。

      我仍然喜欢在standard R IDE for mac 中执行某些仅限 R 的开发任务。但同时对于 Sweave 文档和一些相关的 R 开发,RStudio 胜出。它几乎可以进行零调整。我不确定原始问题后半部分中与 PDF 相关的功能。

      【讨论】:

        【解决方案5】:

        为我节省了一些时间的一件事是 emacs 中的“自动插入”模式。我已经设置好了,每次我打开一个新的 .rnw 文件时,emacs 都会自动设置一个基本的文档模板,我需要做的就是开始编写我的报告。

        更新:我已不再使用自动插入。现在我使用“template.el”方法。

        【讨论】:

          【解决方案6】:

          我也使用“每个项目一个目录”和 Makefile 方法。我还包括在 HTML 中创建输出的命令,然后可以使用 tth 将其转换为 OOo 和 MS Word。这对我来说很重要,因为我的很多合作者都是 MS Office 用户并且拒绝使用 PDF 输出。我从范德比尔特的 Frank Harrell 的 twiki 学到了很多关于如何做到这一点的知识。

          我个人使用 gvim 作为我选择的编辑器,从那里运行 make 非常简单,就像在 Emacs 中一样。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-12-08
            • 1970-01-01
            • 2016-06-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-17
            • 2020-12-29
            相关资源
            最近更新 更多