Sweave 中的工作流程:处理 TeX 错误

Sweave 中的工作流程:处理 TeX 错误

我已经使用 LaTeX 和 R 好几年了,但现在才通过 Sweave 将它们整合在一起。在整理文档时,我会在自己的会话中运行 R 代码以验证其是否正常工作,然后将其添加到 Sweave 文件中。然后,我在 R 中对文件进行 Sweave。一切顺利,因为所有 R 代码都已签出。但是,当我编译 TeX 文件时,几乎总是会出现我犯的错误。

在 TeX 文件中查找错误,将其追溯到 Sweave 文件,然后重新进行 Sweaving 和 TeXing 并不困难。当存在多个错误时,这确实很麻烦,这意味着需要多次重新运行 Sweave 和 pdftex。如果我可以修复 TeX 文件中的所有错误(只需单独重新运行即可),并将它们转移到 Sweave 文件中,使其准备好进行最终的 Sweave 和 TeX 编译,那就更简单了。

关于如何处理这个工作流程,您有什么建议吗?

一个技巧就是不要犯任何错误,但是,作为一名经济学家,我相信最佳错误数量可能大于 0。

谢谢!Charlie

答案1

我也使用 sweave(几个月)和 latex(20 年)。有了速度相当快的机器,最佳方案就是简单地重建经常。我使用“make”(在类 unix 机器上),这样只有 Rnw 文件发生变化的章节才会重建为 tex 文件。这节省了大量 sweave 时间。

或者,您可以编辑 .tex 文件并解决错误,然后在准备好后将结果放回到 .Rnw 文件中。但这样很容易出错。

如果您经常运行 sweave-latex,并在发现错误时立即修复,那么您就不会犯那么多错误。

另一个建议是使用一个不错的编辑器(例如 emacs),它可以为您完成很多工作,例如完成括号块、开始/结束环境等等。这可以防止您可能犯的 2/3 的错误。

答案2

上面的 Dan 可能给出了正确的答案。补充一点,为了使代码执行更便宜、更容易,您可以查看CRAN 上的cacheSweavepgfSweave包,这可能比eval在代码块中设置和取消设置开关更方便。

答案3

根据您的 R 代码,某些 R 计算可能需要很长时间,并且重建通常过于繁琐,而 TeX 部分本身通常可以忽略不计。为了解决这个问题,您可以通过分配以下内容来排除 R 代码的执行(一旦您知道它可以正常工作FALSEeval

<<fig=TRUE,eval=FALSE>>=
# potentially expensive R code here
@

您还可以将eval全局设置为,FALSE并仅在您正在处理的 R 代码中本地启用它(<<eval=TRUE>>=)。当您主要处理 TeX 问题时,这将是一种好方法:

\SweaveOpts{echo=FALSE,pdf=TRUE,eps=FALSE,eval=FALSE}

答案4

部分问题在于编译 Sweave 文档所需的时间。现有观点都很好,即:

  • 尽量减少错误
  • 考虑eval=FALSE何时需要对 tex 部分进行大量迭代,并且 R 代码块非常耗时
  • 考虑 sweave 缓存选项
  • 使用快速的计算机
  • 使用 make 文件并将文档分成多个 Rnw 文件,以便只需要重建更新的 Rnw 文件

关于修改,邓肯·默多克(Duncan Murdoch)有一个软件原型,可以对 sweave 文档进行正向和反向搜索:

鉴于它的开发状态是 Alpha,我还没有尝试过。

相关内容