Как я могу Sweave многофайловый проект? - PullRequest
8 голосов
/ 10 августа 2010

Я пишу свою диссертацию на LaTeX, и, так как все стало немного длиннее на мой вкус, я разделил ее на несколько файлов.Давайте назовем их thesis.tex, intro.tex, mat_n_met.tex, rslts.tex и discsn.tex.Я связал intro.tex, mat_n_met.tex, rslts.tex и discsn.tex через thesis.tex с \include{intro} (и так далее ...).Я также создал отдельный файл с именем r_crunching.Rnw (который я запускаю через Sweave), в котором содержится чанк, на котором выполняется R-скрипт с анализом данных, и чанки, которые выдают pdf-результаты графиков, которые я встраиваю с помощью \includegraphics (например, rslts.tex).Все еще следите?

Если я запускаю Rnw (то есть я переименовал rslts.tex в rslts.Rnw) без "ссылки" на чанк со сценарием R, вы получите ошибку Sweave() с указанием ссылкив \Sexpr{} не существует.Есть ли способ, без объединения всех файлов в один .Rnw, вызвать \Sexpr{}, скажем, rslts.Rnw?

Другие методы, как это сделать, приветствуются.

Ответы [ 5 ]

5 голосов
/ 02 июля 2013

Я рекомендую использовать RStudio (http://www.rstudio.com/ide/). Sweave прекрасно интегрирован в эту IDE и поддерживает многофайловые документы. Даже навигация по журналу ошибок Synctex и TeX по-прежнему работает при работе с многофайловыми документами.

Из мастер-файла вы можете включить дочерние файлы, используя

\SweaveInput{Child.Rnw}

Вы можете связать дочерний файл обратно с основным файлом, включив директиву

% !Rnw root = Master.Rnw

в дочернем файле. Таким образом, работая с дочерним файлом и набирая его, RStudio знает, как набирать главный файл.

Подробности объясняются в документации RStudio на http://www.rstudio.com/ide/docs/authoring/multiple_rnw_files

4 голосов
/ 10 августа 2010

Забудьте на секунду, что вы имеете дело со Sweave, и просто подумайте о проблеме с латексом, для которой \include и \includeonly предлагают решения. Попробуйте это с несколькими простыми тестовыми файлами.

Как только вы это выяснили, сложите Sweave обратно в микс, и он будет работать, так как Sweave после "просто" этапа предварительной обработки, хотя и очень умного.

2 голосов
/ 27 сентября 2011

Чтобы расширить ответ Дирка и mjm, я бы предложил использовать \include и 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 предоставляет набор правил для преобразования из одного формата файла в другой. Например, для преобразования из .Rnw в .R мы используем команду

`R CMD Stangle $<`
1 голос
/ 11 августа 2010

один довольно очевидный ответ - использовать make-файл, возможно, используя cachesweave пакета, для обработки соответствующих файлов в правильном порядке.

0 голосов
/ 21 апреля 2018

Мое решение для многофайловых проектов в Sweave (под Rstudio) следующее:

1) Создайте мастер-файл, скажем master.Rnw, в котором у вас есть вызовы для субфайлов intro.Rnw, matmet.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 и ... voilá:

Снимок экрана файла, созданного вышеуказанной командой.

...