Como faço para suspender um projeto de vários arquivos?
-
27-09-2019 - |
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.
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á: