2014-03-28 56 views
5

我從我的大學獲得了2個使用LaTeX撰寫論文的文件。一個是.sty文件,另一個是.TeX文件。爲了在R工作室工作,我決定爲每章分別創建一個.Rnw文件,並將所有章節合併爲一個文件。我認爲.TeX文件是我可以合併所有章節的地方,因爲它提供了輸出中的示例章節。在R工作室的網站上有一個標題爲「處理多個Rnw文件」的頁面,它描述了這個過程(我猜),但對我來說並不清楚。它談到了我認爲是我的案例中的章節的「孩子」文件。所以我的一個簡單問題是,如果我爲每章創建了不同的.Rnw文件,我怎麼能要求R將它們合併到一個由大學提供給我的TeX文件中?請承擔我的無知,因爲我是可重複研究的新人。與Rstudio合作編寫論文章節.Rnw

回答

4

假設你使用的是knitr(我強烈建議knitr超過sweave),簡單的方法是使用childchunk option

舉個例子,假設你有2個章節,保存在文件chap1.Rnwchap2.Rnw和主控文檔thesis.Rnw(與大學樣式文件名爲thesisStyle)。你可以把這些放在一起,裏面thesis.Rnw - 假設這些都是在同一個目錄 - 通過:

\documentclass{article} 
\usepackage{thesisStyle} 

\begin{document} 
% "include" chapter 1 
<<chap1, child='chapt1.Rnw'>>= 
@ 

% again with chapter 2 
<<chap2, child='chap2.Rnw'>>= 
@ 

\end{document} 

這時正好有RStudio編譯thesis.Rnw,它會吐出thesis.tex將擁有一切正常捆綁在一起。

雖然這不是全部!你可以開發chap1.Rnw,而不必給它自己的序言。也就是說,如果chap1.Rnw內容

<<echo=FALSE, cache=FALSE>>= 
set_parent('thesis.Rnw') 
@ 

\chapter{In a world where...} 
\section{Great voice actors in movie trailer history} 
ANYTHING YOU'D NORMALLY PUT IN AN .Rnw FILE 

,那麼你可以編譯chap1.Rnw像任何普通.Rnw文件,它會不會從thesis.Rnw序言之前運行的TeX任何後端你使用(通常pdflatex或xelatex )。特別是,knitr會拍下chapt1.tex頂部的\documentclass{article}\usepackage{thesisStyle}行。

謹慎的一句話,我發現在knitr中的孩子 - 父母模型是白色空間敏感的。所以,一定有塊

<<echo=FALSE, cache=FALSE>>= 
set_parent('thesis.Rnw') 
@ 
3

您有幾個選項。

一種選擇是隻用手處理每個章節。每個章節都有一個.Rnw文件,然後在Rstudio(或R)中運行knitr軟件包中的knit函數(可能有Rstudio按鈕或菜單直接執行此操作),將.Rnw文件轉換爲。 tex文件。然後在父LaTeX文檔中,您只需使用\include即可包含每章的.tex文件。這確實意味着你自己處理每一章,並且在你改變任何內容時不得不返回並重做它。

另一個選擇是創建一個父母和孩子的文件,knitr會自動理解和處理你(Rstudio正在使用knitr來處理.tex和最終的.pdf文件)。這page已經演示瞭如何創建父文件和子文件,只需修改提供給您的.tex文件以將重要內容包含在演示中(並可能將名稱更改爲.Rnw)即可。確保文檔類與提供給您的.sty文件相匹配,並保留.tex文件中的重要選項,但包含knitr演示中顯示的子文檔。這樣,您可以將文檔作爲一個整體進行處理,而不是對每個單獨的章節進行處理

+0

@Tyler上面沒有空間,當你'knit'它只是通過非-R的部分,並與輸出替代將R部分的文檔。它不運行LaTeX或其他程序,所以前導碼等是不需要的。單擊Rstudio中的按鈕來運行'knit'可以運行其他程序,但直接使用'knit'(並指定.tex輸出)不會。 –

+0

你說得對,對不起。我混淆了兩種不同的工作流程。 Pandoc爲Rmd - > md - > pdf添加標題,但完全不同。 – Tyler