与Rstudio合作,在.Rnw中撰写论文章节

时间:2014-03-28 14:48:06

标签: r knitr rstudio rnw

我从大学获得了两个使用LaTeX撰写论文的文件。一个是.sty文件,另一个是.TeX文件。为了在R studio中工作,我决定为每个章节分别使用.Rnw文件和一个用于组合所有章节的文件。我认为.TeX文件是我可以组合所有章节的文件,因为它提供了输出中的示例章节。在R studio的网站上有一个标题为“使用多个Rnw文件”的页面,它描述了这个过程(我猜),但我不清楚。它讨论了'儿童'文件,我认为这是我案例中的章节。所以我的简单问题是,如果我创建不同的.Rnw文件,每章一个,我怎么能要求R将它们合并到一个大学提供给我的TeX文件中?因为我不熟悉可重复的研究内容,请承担我的无知。

2 个答案:

答案 0 :(得分:4)

假设你正在使用knitr(我强烈推荐knitr over sweave),使用child chunk 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

然后您可以像任何常规.Rnw文件一样编译chap1.Rnw,并且在运行您正在使用的任何TeX后端之前从thesis.Rnw获取序言(通常是pdflatex或xelatex) 。特别是,knitr会拍打\documentclass{article}顶部的\usepackage{thesisStyle}chapt1.tex行。

提醒一句,我发现knitr中的亲子模型对白空间敏感。所以,确保块上方没有空间

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

答案 1 :(得分:3)

你有几个选择。

一种选择是手工处理每个章节。每个章节都有一个.Rnw文件,然后在Rstudio(或R)中你从knitr包运行knit函数(可能有一个Rstudio按钮或菜单直接执行此操作)来转换你的.Rnw文件到.tex文件。然后在父LaTeX文档中,您只需使用\include包含每章的.tex文件。这意味着你自己处理每一章,并且必须在你改变任何东西的时候回去重做它。

另一个选项是创建一个父编辑和子文档,编织者将自动理解并处理这些文档(Rstudio使用knitr对.tex和最终的.pdf文件进行处理)。这个page有以这种方式创建父文档和子文档的演示,只需修改给你的.tex文件,在演示中包含重要内容(并可能将名称更改为.Rnw)。确保文档类与给出的.sty文件匹配,并保留.tex文件中的重要选项,但包括knitr demo中显示的子文档。通过这种方式,您可以整体处理文档,而不是每个章节。