2012-10-22 35 views
6

Đang cố gắng để ghi file Latex thứ hai của tôiworkflow giữa cao su và R screwed

\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} 

Đã lưu tệp với .Rnw như mở rộng. Sau đó tôi có thể sử dụng Sweave dưới R để chuyển đổi tệp thành tex. Sau đó tôi chạy pdflatex dưới cmd để lấy tệp .pdf của tôi. R được lưu trữ trong/Users/Brenden/Documents. MiKTex được lưu trữ trong/Users/Brenden/Desktop.

Người ta nói rằng thường là dòng "usepackage" là không cần thiết, như khi tôi chạy Sweave dưới R, một dòng "usepackage {Sweave}" sẽ được thêm vào tệp tex được lưu trữ trong/Users/Brenden/Tài liệu. Tuy nhiên, nếu tôi không đặt trong dòng userpackage, khi tôi chạy pdflatex dưới cmd (hoặc dưới/Documents hoặc/Desktop), tôi nhận được một messsage nói rằng "Sweave.sty không tìm thấy". Vì vậy, tôi đã trải qua rắc rối này bằng cách luôn thêm một dòng của usepackage với một con đường chi tiết để giúp phá vỡ vấn đề. Mặc dù vấn đề "Sweave.sty không tìm thấy" được phá vỡ, tôi nhận thấy rằng khi tôi chạy pdflatex dưới cmd, tôi đều có phản ứng

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

Sau đó, nó chạy qua một số tập tin với .sty dưới MiKTeX

(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) 
... 

để cuối cùng tạo ra một .pdf

Từ một bài đăng trên Stackoverflow, người ta nói, "con đường đó được thiết lập tự động khi bạn cài đặt LaTeX, nó cây texmf cá nhân của bạn và bạn có thể đặt bất kỳ phong cách hoặc lớp dữ liệu mà bạn muốn LaTeX tìm thấy ở đó. Tên thư mục không bị mờ er, nó tìm kiếm đệ quy trong chúng cho Sweave.sty ". Với tôi, tuy nhiên, rõ ràng MiKTex của tôi không thể tìm thấy Sweave.sty trừ khi tôi chỉ định đường dẫn. Và ngay cả với đặc tả đường dẫn, LaTex vẫn cho tôi một cảnh báo. Ai đó có thể giải thích cho tôi nơi tôi đã sửa chữa (trong khi cài đặt MiKTex, có lẽ?) Để tôi có thể giúp MiKtex tìm đường đến Sweave mà không chỉ định đường đi của tôi?

Cảm ơn bạn.

+0

Liên kết tới bài đăng được đề cập trong OP: http://stackoverflow.com/a/7610315/210673 – Aaron

Trả lời

7

Trong chương trình Cài đặt MiKTeX, có một tab có tên là "Rễ". Ở đó bạn có thể chỉ định nơi có thể tìm thấy các tệp .sty bổ sung. Trong trường hợp của bạn, tôi tin rằng bạn sẽ muốn thêm C:\Users\Brenden\Documents\R\R-2.15.1\share\texmf làm thư mục gốc bổ sung. Làm điều này, bất kỳ chương trình TeX nào cũng có thể tìm thấy Sweave.sty cho dù chạy từ bên trong R hay từ dòng lệnh.

+0

Cảm ơn rất nhiều, Brian. Nó đã làm việc! Câu hỏi tiếp theo của người mới là thông tin này được cung cấp trong một trong các tài liệu trong MiKTex? Cảm ơn bạn lần nữa –

+1

R và MiKTeX có những ý tưởng hơi khác nhau về cách xử lý các tệp bổ sung này. MiKTeX có hệ thống phân phối và đóng gói riêng mà R không sử dụng cho các tệp liên quan đến TeX của nó. R vá tất cả mọi thứ khi mọi thứ được gọi từ bên trong R bằng cách thay đổi các biến môi trường (TEXINPUTS, tôi tin), để TeX có thể tìm thấy các tệp R cụ thể. Nhưng khi được gọi từ bên ngoài R, keo này bị thiếu. Xem, ví dụ, một cuộc thảo luận về điều này: http://tolstoy.newcastle.edu.au/R/e14/help/11/05/2061.html –

4

Tôi nghi ngờ đường dẫn được đề cập trong bài đăng khác là đường dẫn đến cây texmf cá nhân của bạn, đó không phải là nơi Sweave đặt nó. Một lựa chọn là để di chuyển nó đến cây texmf cá nhân của bạn, nhưng phương pháp thông thường hiện nay, tôi tin rằng, là chạy pdflatex từ bên trong R, như thế này:

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

Tôi nghĩ bạn cũng có thể có Sweave thêm đường dẫn đầy đủ tự động bằng cách thêm

export SWEAVE_STYLEPATH_DEFAULT="TRUE" 

vào tệp .bashrc hoặc bất kỳ nội dung tương đương nào có trên hệ thống của bạn.

+0

Cảm ơn rất nhiều, Aaron. Tôi thực sự đã thử texi2dvi trước và thất bại (lỗi của newbie). Nhưng sau đó tôi phát hiện ra tôi cần phải tải lên các gói công cụ đầu tiên. –

2

Tại dòng lệnh, R CMD thiết lập môi trường với các biến thích hợp để chạy R, ví dụ trên Windows

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

bao gồm (điều này không được tìm thấy nếu một loại set tại dòng lệnh)

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

và do đó

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

sẽ tìm thấy Sweave.sty. Ngoài ra, tools::texi2dvi có thể được gọi từ bên trong R.

6

Đó là gây phiền nhiễu để được luôn bị phân tâm bởi quỷ nhỏ như thế này (khái niệm mới texmf tree, vô tận biến môi trường TEXINPUTS, SWEAVE_STYLEPATH_DEFAULT, ...). Bạn sẽ không bao giờ lo lắng về gói LaTeX nếu bạn sử dụng knitr, và nếu bạn thích phong cách Sweave, bạn chỉ có thể đặt render_sweave() trong tài liệu như:

\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} 

Lưu nó như là, nói, test.Rnw và biên dịch nó với

library(knitr); knit('test.Rnw') # or knit2pdf('test.Rnw') 

Và tôi đoán bạn có thể tốt hơn mà không cần render_sweave() (tức là sử dụng kiểu LaTeX mặc định trong knitr).