Pergunta

Estou escrevendo minha tese no látex e, como as coisas ficaram um pouco longas para o meu gosto, eu a dividi em vários arquivos. Vamos chamá -los thesis.tex, intro.tex, mat_n_met.tex, rslts.tex e discsn.tex. Eu vinculei intro.tex, mat_n_met.tex, rslts.tex e discsn.tex Através dos thesis.tex com \include{intro} (e assim por diante...). Eu também criei um arquivo separado chamado r_crunching.Rnw (que eu corro pelo Sweave) que contém um pedaço que executa o script R com análise de dados e pedaços que produzem saídas em PDF de gráficos que eu incorporo via \includegraphics (em por exemplo, rslts.tex). Ainda seguindo?

Se eu executar um RNW (ou seja, renomeei rslts.tex para rslts.Rnw) sem "um link" para o pedaço com o script R, você receberá um Sweave() erro dizendo a referência em \Sexpr{} não existe. Existe uma maneira, sem fundir todos os arquivos em um único .rnw, para ligar \Sexpr{} em digamos rslts.Rnw?

Outros métodos como realizar isso são bem -vindos.

Foi útil?

Solução

Esqueça por um segundo com o qual você está lidando com o Sweave e pense no problema do látex - pelo qual \include e \includeonly oferecer soluções. Tente isso com alguns arquivos de teste simples.

Depois de descobrir isso, volte a dobrar de volta à mistura e ele apenas funcionará como Sweave é 'apenas apenas uma etapa de pré-processamento, embora muito inteligente.

Outras dicas

Eu recomendo usar o RSTUDIO (http://www.rstudio.com/ide/). A Sweave é bem integrada a esse IDE e suporta documentos de vários arquivos. Até a navegação do log de erros do SyncTex e Tex ainda funcionam ao trabalhar com documentos de vários arquivos.

No arquivo mestre, você pode incluir arquivos infantis usando

\SweaveInput{Child.Rnw}

Você pode vincular um arquivo filho de volta ao arquivo mestre, incluindo a diretiva

% !Rnw root = Master.Rnw

no arquivo filho. Dessa forma, ao trabalhar em um arquivo infantil e digitando -o, o RSTUDIO sabe para digitar o arquivo mestre.

Os detalhes são explicados na documentação do RStudio em http://www.rstudio.com/ide/docs/authoring/multiple_rnw_files

Para expandir a resposta de Dirk e MJM, sugiro usar \include'S e makefiles.

Suponha que você tenha um arquivo mestre: master.tex. Nesse arquivo, você inclui alguns .tex e .Rnw arquivos, ou seja

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

Agora o seguinte makefile fornece funções para criar o .tex, .R e .pdf arquivos:

.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 $<

Essencialmente, o .SUFFIXES Forneça um conjunto de regras para converter de um formato de arquivo para outro. Por exemplo, para converter de .Rnw para .R, nós usamos o comando

`R CMD Stangle $<`

Uma resposta bastante óbvia é usar um Makefile, possivelmente usando o pacote Caches -Weave, para processar os arquivos relevantes na ordem certa.

Minha solução para projetos de vários arquivos em Sweave (sob rstudio) é o seguinte:

1) Crie um arquivo mestre, digamos master.Rnw, em que você tem as chamadas para os subfiles intro.Rnw, matmet.Rnw, etc:

\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) Crie os subfiles. Estou dando aqui apenas o primeiro, intro.Rnw. Observe que nos subfiles você não use comandos de pré -esquilo como \documentclass ou \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) Depois de salvar modificações em 'Intro.rnw', basta acessar 'Master.rnw' e compilá -lo usando Ctrl+Shift+K e ... Voilá:

Captura de tela do arquivo criado pelo comando acima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top