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

问题描述 投票:6回答:5

试着写我的第二个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 / Documents下。但是,如果我没有输入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的方式?

谢谢。

r latex sweave
5个回答
7
投票

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


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风格)。


3
投票

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

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

我想你也可以让Sweave通过添加自动添加完整路径

export SWEAVE_STYLEPATH_DEFAULT="TRUE"

到你的.bashrc文件,或者你的系统上的等价文件。


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。此外,tools::texi2dvi可以从R内调用。


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.