【问题标题】:Writing big documents with Sweave. Is it possible to do as with LaTeX?使用 Sweave 编写大型文档。可以像使用 LaTeX 一样吗?
【发布时间】:2023-03-22 06:16:01
【问题描述】:

我只是发现SweaveR。我看过一些Sweave文档的例子,也开始自己写一两个。在R 中进行计算并直接在LaTeX 文档中输出结果的能力给我留下了深刻的印象。

现在我正在考虑由几页和几个部分组成的更大的文档(就像我们通常使用LaTeX 一样)。使用LaTeX(我使用WinEdt),我设置了一个主文档(例如main.tex),然后设置了其他辅助文档,例如introduction.texdiscussion.tex等。

我的问题是:我们也可以使用Sweave 来执行此操作吗?现在我正在单独使用单个 Sweave 文档 (.Rnw)。我们可以像通常使用LaTeX 那样拥有多个Sweave 文档(一个主文档和一个辅助文档)吗?

一种解决方法是拥有单独的Sweave 文件,然后将它们编织成R LaTeX 块,可以将其复制到LaTeX 文档中,但整个想法似乎效率很低且耗时。

请告知您有什么建议和解决方案。

非常感谢...

【问题讨论】:

    标签: r latex sweave


    【解决方案1】:

    这对我来说非常有效:

    我有一个没有文本的主文件(“master.Rnw”),它仅用于收集最终形成文档的文件(章节、节)。

    然后我有一个包含 R 代码的文件,该文件在其他各种文件(“func.Rnw”)中重复使用。在这里,我有很多命名的块

    <<my_fun_1,eval=FALSE,echo=FALSE>>=
    # code:
    c <- a * b
    @
    

    在master.Rnw中,我在\begin{document}之后做的第一件事就是

    \SweaveInput{func.Rnw}
    

    从那里,我有我的命名块可用。在文件“chap1.Rnw”中我现在可以拥有

    <<echo=FALSE>>=
    a <- 10
    b <- 25
    <<my_fun_1>>
    c
    @
    

    当然,我必须

    \SweaveInput{chap1.Rnw})
    

    进入master.Rnw。

    我只需要\Sweave{master.Rnw} 然后 pdflatex 生成的 master.tex 文件,无需复制/粘贴或处理多个文件。

    我只是在写一篇 60 多页的论文,其中包含大约 25 个表格和数字,到目前为止一切都很好。

    希望这会有所帮助, 雷纳

    【讨论】:

    • @vaettchen 非常感谢您的详细解释。如果我理解得很好,那么不需要在 R 编辑器中明确设置 master.Rnw 文件(我不知道这是否可能)。只需在主文件中使用 put Sweaveinput{...}。有趣的。我得试试你的概念。现在有 1 人投票。
    • @yCalleecharan:当心 - 它是 \SweaveInput{} 大写 I
    • @vaettchen。好的,我得问你一些细节。在 master.Rnw 中,我们有:\documentclass[a4paper]{article} 和 \usepackage{Sweave},在 \begin{document} 之后,我们放置了 \SweaveInput{func.Rnw} 和 \SweaveInput{chap1.Rnw})。其次,在 chap1.Rnw 中,我们只有由 >== 和 @ 分隔的 R 代码,在这里您可以使用您在此处的示例中显示的函数来输出 c。这样好吗?最后,在 func.Rnw 文件中,我们还使用您提供的函数 my_fun1 编写了 R 代码。那么我们是否只在 master.Rnw 中设置了 \document{class} 选项和 \usepackage{Sweave} 选项?
    • @yCalleecharan:正确,只有 master.Rnw 需要 \documentclass{} 和 \usepackage{} 之类的东西,所有其他文件都是包含 Sweave 块和 LaTeX 格式文本的简单文本文件。运行 \Sweave{master.Rnw} 后,您将只有一个 master.tex 文件,其中包含所有文件的内容以及成功编译 LaTeX 所需的所有信息。
    • @ vaettchen 不幸的是,我得到:SweaveReadFile 中的错误(c(ifile,文件),语法,编码 = 编码):没有找到名为 './chap1.Rnw)' 的 Sweave 文件调用: Sweave -> SweaveReadFile -> SweaveReadFile 执行停止
    【解决方案2】:

    我正在使用 Sweave 编写一本书,大约有 16 章。我同意使用带有多个 Rnw 文件的 makefile 是个好主意。这种方法的另一个好处是 make 可以并行运行(我认为是-p),因此根据本章的对象如何相互依赖,您可以同时运行大量代码。

    对我产生影响的事情是缓存。我的几个代码块可以运行数天,但在编写本书的过程中并没有改变。有一些包允许您在运行时保存结果,并且只有在块所依赖的对象发生更改时才重新运行块。

    有几个包可以做到这一点。见:

    http://cran.r-project.org/web/views/ReproducibleResearch.html

    我使用来自 Bioconductor 的 weaver 包。

    当我在思考时...如果您有多个作者,我发现共享 Dropbox 帐户是维护项目的绝佳方式。

    最大

    【讨论】:

      【解决方案3】:

      我建议使用 RStudio (http://www.rstudio.com/ide/) 而不是 WinEdt。 Sweave 很好地集成到该 IDE 中,并且与 WinEdt 一样,您可以将一个文件设置为主文件。您可以从主文件中包含子文件,使用

      \SweaveInput{Child.Rnw}
      

      您可以通过包含指令将子文件链接回主文件

      % !Rnw root = Master.Rnw
      

      在子文件中。这样,在处理子文件并对其进行排版时,RStudio 知道要对主文件进行排版。

      详细信息在http://www.rstudio.com/ide/docs/authoring/multiple_rnw_files的 RStudio 文档中进行了解释

      最好的功能是 Synctex 和 TeX 错误日志导航即使在处理多文件文档时仍然有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-17
        • 2017-11-11
        相关资源
        最近更新 更多