Latex和R之间的工作流程拧紧了

时间:2012-10-22 18:12:05

标签: r latex sweave

尝试编写我的第二个Latex文件

\documentclass{article}
\title{simple Sweave script}
\usepackage{/Users/Brenden/Documents/R/R-2.15.1/share/texmf/tex/latex/Sweave}
\begin{document}
\maketitle
 This is a simple script to demonstrate Sweave. Let's
 begin by generating some results
<<>>=
x=rnorm(30)
y=rnorm(30)
mean(x)
cor(x,y)
@
and follow that up with some random text
\end{document}

使用.Rnw作为扩展名保存的文件。然后我可以在R下使用Sweave将文件转换为tex。然后我在cmd下运行pdflatex来获取我的.pdf文件。 R存储在/ Users / Brenden / Documents下。 MiKTex存储在/ Users / Brenden / Desktop下。

据说通常不需要“usepackage”这一行,因为当我在R下运行Sweave时,一行“usepackage {Sweave}”将被添加到tex文件中,该文件存储在/ Users / Brenden下/文件。但是,如果我没有输入userpackage行,当我在cmd下运行pdflatex时(在/ Documents或/ Desktop下),我得到了一个“Sweave.sty not found”的消息。所以我总是通过添加一行usepackage以及详细的路径帮助规避问题来解决这个问题。虽然“Sweave.sty not found”问题被规避了,但我注意到当我在cmd下运行pdflatex时,我得到了回复

LaTeX Warning: You have requested package '/Users/Brenden/Documents/R/R- 
2.15.1/share/texmf/tex/latex/Sweave', but the package provides "Sweave'.

然后它在MiKTex下使用.sty运行几个文件

(C:\Users\Brenden\Desktop\MiKTex\tex\latex\base\ifthen.sty)
(C:\Users\Brenden\Desktop\MiKTex\tex\latex\graphics\graphicx.sty)
(C:\Users\Brenden\Desktop\MiKTex\tex\latex\graphics\keyval.sty)
(C:\Users\Brenden\Desktop\MiKTex\tex\latex\graphics\graphics.sty)
(C:\Users\Brenden\Desktop\MiKTex\tex\latex\graphics\trig.sty)
...

最终创建.pdf

从Stackoverflow上的另一篇文章中可以看出,“当您安装LaTeX时,该路径会自动设置;它是您的个人texmf树,您可以放置​​任何您希望LaTeX在那里找到的样式或类文件。目录名称”重要的是,它以递归方式搜索它们的Sweave.sty“。然而,对我而言,除非我指定路径,否则我的MiKTex显然无法找到Sweave.sty。即使有了路径规范,LaTex仍然会给我一个警告。有人可以向我解释一下我搞砸了吗(在安装MiKTex期间,也许?)这样我就可以帮助MiKtex在没有指定路径的情况下找到Sweave的方式?

谢谢。

5 个答案:

答案 0 :(得分:7)

在MiKTeX设置程序中,有一个名为“Roots”的标签。您可以在其中指定可以找到其他.sty文件的位置。在您的情况下,我相信您会想要添加C:\Users\Brenden\Documents\R\R-2.15.1\share\texmf作为额外的根。这样做,任何TeX程序都能找到Sweave.sty,无论是从R内部还是从命令行运行。

答案 1 :(得分:6)

总是被像这样的小鬼(新概念texmf tree,无尽的环境变量TEXINPUTSSWEAVE_STYLEPATH_DEFAULT,......)分心,这很令人讨厌。如果你使用knitr,你永远不会担心LaTeX包,如果你喜欢Sweave风格,你可以简单地将render_sweave()放在文档中:

\documentclass{article}
\title{simple Sweave script}
<<setup, include=FALSE>>=
render_sweave()
@

\begin{document}
\maketitle
 This is a simple script to demonstrate Sweave. Let's
 begin by generating some results
<<>>=
x=rnorm(30)
y=rnorm(30)
mean(x)
cor(x,y)
@
and follow that up with some random text
\end{document}

将其另存为test.Rnw并使用

进行编译
library(knitr); knit('test.Rnw') # or knit2pdf('test.Rnw')

我猜你没有render_sweave()可能会更好(即使用knitr中的默认LaTeX风格)。

答案 2 :(得分:3)

我怀疑在另一篇文章中提到的路径是你的个人texmf树的路径,这不是Sweave所说的。一种选择是将其移动到您的个人texmf树,但我认为现在常用的方法是从R中运行pdflatex,如下所示:

texi2dvi("foo.tex", pdf = TRUE)

我认为你也可以通过添加

自动添加完整路径
export SWEAVE_STYLEPATH_DEFAULT="TRUE"

到您的.bashrc文件,或者您系统上的等效文件。

答案 3 :(得分:2)

在命令行中,R CMD使用适合运行R的变量设置环境,例如在Windows上

C:\Users\mtmorgan> "c:\Program Files\R\R-2.15.1\bin\R" CMD set

包括(如果在命令行中键入set,则找不到此项)

TEXINPUTS=.;c:/PROGRA~1/R/R-215~1/.1/share/texmf/tex/latex;

等等

C:\Users\mtmorgan> "c:\Program Files\R\R-2.15.1\bin\R" CMD pdflatex myfile.tex

会找到Sweave.sty。此外,可以从R中调用tools::texi2dvi

答案 4 :(得分:0)

我最终得到以下解决方案:

install.packages("tinytex")   
require("tinytex")}
install_tinytex(force = TRUE)

Sweave(  "Report.Rnw" , encoding = "utf8" )  
xelatex('Report.tex')

此代码将安装TinyTex,然后您可以使用 pdflatex() xelatex() lualatex()进行编译。