8

我正在用 LaTeX 写论文,因为我的口味有点长,所以我把它分成了几个文件。我们称它们为thesis.texintro.texmat_n_met.tex和。我已经将,和through与(等等...)联系起来。我还创建了一个名为(我通过 Sweave 运行)的单独文件,该文件包含一个运行 R 脚本的块,该脚本具有数据分析和生成我通过嵌入的图形的 pdf 输出的块(例如,)。还在追?rslts.texdiscsn.texintro.texmat_n_met.texrslts.texdiscsn.texthesis.tex\include{intro}r_crunching.Rnw\includegraphicsrslts.tex

如果我运行一个 Rnw(即我重命名rslts.texrslts.Rnw)而没有使用 R 脚本到该块的“链接”,您将收到一个Sweave()错误,指出引用 in\Sexpr{}不存在。有没有办法在不将所有文件合并到一个 .Rnw 的情况下调用\Sexpr{}say rslts.Rnw

欢迎使用其他方法来完成此操作。

4

5 回答 5

5

我推荐使用 RStudio ( http://www.rstudio.com/ide/ )。Sweave 很好地集成到该 IDE 中,它支持多文件文档。在处理多文件文档时,甚至 Synctex 和 TeX 错误日志导航仍然有效。

从主文件中,您可以使用包含子文件

\SweaveInput{Child.Rnw}

您可以通过包含指令将子文件链接回主文件

% !Rnw root = Master.Rnw

在子文件中。这样,在处理子文件并对其进行排版时,RStudio 知道要对主文件进行排版。

详细信息在http://www.rstudio.com/ide/docs/authoring/multiple_rnw_files的 RStudio 文档中进行了解释

于 2013-07-02T17:10:59.823 回答
4

暂时忘记您正在与 Sweave 打交道,只考虑乳胶问题 -\include\includeonly提供解决方案。尝试使用一些简单的测试文件。

一旦你弄清楚了,将 Sweave 折叠回混合物中,它就像 Sweave 在“仅仅”一个预处理步骤之后一样工作,尽管这是一个非常聪明的步骤。

于 2010-08-10T18:38:38.467 回答
2

为了扩展 Dirk 和 mjm 的答案,我建议使用\include's 和 Makefiles。

假设您有一个主文件:master.tex. 在该文件中,您包含一些.tex.Rnw文件,即

\include chapter1
\include chapter2
\include chapter3
....

现在下面的 Makefile 提供了创建.tex,.R.pdf文件的函数:

.SUFFIXES: .tex .pdf .Rnw .R

MAIN = master
##List your your .Rnw includes
RNWINCLUDES = chapter1 chapter2 chapter3
TEX = $(RNWINCLUDES:=.tex)
RFILES = $(RNWINCLUDES:=.R)
RNWFILES = $(INCLUDES:=.Rnw)

all: $(MAIN).pdf
    $(MAIN).pdf: $(TEX) $(MAIN).tex

R: $(RFILES)

.Rnw.R:
     R CMD Stangle $<

.Rnw.tex:
     R CMD Sweave $<

.tex.pdf:
     pdflatex $<
     bibtex $*
     pdflatex $<
     pdflatex $<

本质上,它.SUFFIXES提供了一组从一种文件格式转换为另一种文件格式的规则。例如,要将 from 转换.Rnw.R,我们使用命令

`R CMD Stangle $<`
于 2011-09-27T08:54:31.690 回答
1

一个相当明显的答案是使用makefile,可能使用包cachesweave,以正确的顺序处理相关文件。

于 2010-08-10T21:04:43.797 回答
0

我在 Sweave(在 Rstudio 下)中对多文件项目的解决方案如下:

1)创建一个主文件,比如说master.Rnw,您可以在其中调用子文件intro.Rnwmatmet.Rnw等等:

\documentclass[11pt]{book}
% \usepackage{blah, blah} as you wish

\graphicspath{ {./figs/}

\begin{document}
\SweaveOpts{concordance=TRUE}

\include{intro} % a call to 'intro.Rnw'
\include{matmet} % a call to 'matmet.Rnw'
\include{results} % a call to 'results.Rnw'
\include{discuss} % a call to 'discuss.Rnw'

\end{document}

2) 创建子文件。我在这里只给出第一个,intro.Rnw. 请注意,在子文件中,您不要使用序言命令,例如\documentclass\begin{document}

\chapter{Introduction}\label{ch:intro}
\section{This is section 01}
In section 01 we are concerned about whether \texttt{Sexpr} could possibly work. The chunk below creates a variable \em{a} which will be referred to by this command later on.

<<>>=
a <- 1+2
@

Ok, if it is working, we shall see number 3 right here: \Sexpr{a}.

3) 在“intro.Rnw”中保存修改后,只需转到“master.Rnw”并使用 Ctrl+Shift+K 编译它...瞧:

上述命令创建的文件的屏幕截图。

于 2018-04-21T16:12:41.583 回答