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

B C*_*hen 6 latex r 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}
Run Code Online (Sandbox Code Playgroud)

文件以.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'.
Run Code Online (Sandbox Code Playgroud)

然后它在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)
...
Run Code Online (Sandbox Code Playgroud)

最终创建一个.pdf

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

谢谢.

Bri*_*ggs 7

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


Yih*_*Xie 6

这是烦人通过这样的小鬼总是注意力不集中(新概念texmf tree,无尽的环境变量TEXINPUTS,SWEAVE_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}
Run Code Online (Sandbox Code Playgroud)

保存为,比方说,test.Rnw并用它编译

library(knitr); knit('test.Rnw') # or knit2pdf('test.Rnw')
Run Code Online (Sandbox Code Playgroud)

而且我猜你可能没有好转render_sweave()(即使用默认的LaTeX风格knitr).