Как сплести многофайловый проект?

Я пишу свою диссертацию в 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?

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


person Roman Luštrik    schedule 10.08.2010    source источник
comment
не по теме, но на всякий случай полезно: staff.acecrc.org. au/~mdsumner/TCallaghan Этот шаблон показывает, как использовать инфраструктуру include/includeonly, и содержит все элементы по крайней мере для одного учреждения. Я использовал его напрямую и только что заменил chap1.tex и т. Д. Своими эквивалентами Rnw и добавил Sweave в предварительный латексный процесс.   -  person mdsumner    schedule 11.08.2010
comment
Я отредактировал заголовок, чтобы сказать, как я понял ваш вопрос. Не стесняйтесь редактировать снова, если я понял это неправильно. (Я все еще не очень понимал проблему и то, как помог принятый ответ.)   -  person Paŭlo Ebermann    schedule 28.08.2011
comment
Проблема заключалась в том, что по крайней мере два файла были файлами Sweave, и результаты одного не могли быть видны другому. Я думаю, что первоначальное название было проще и понятнее, хотя и неформальным. Роман все еще активен здесь, так что, возможно, он вмешается, а пока я верну его ближе к тому, с чего все началось. Павел, надеюсь, это не грубо, но зачем редактировать вопрос, которого не понимаешь?   -  person Aaron left Stack Overflow    schedule 28.08.2011
comment
@ Аарон, без обид. Я думаю, что помощь мне в целом является плохим заголовком, и -titles-how-should-i-proceed/102197#102197">Сейчас я просматриваю все вопросы по некоторым тегам с некоторыми из этих плохих ключевых слов, пытаясь дать им лучшие заголовки. (Мой тег здесь был латекс, а не r или переплетать). Вы правы, я должен был просто прокомментировать в этом случае.   -  person Paŭlo Ebermann    schedule 28.08.2011
comment
Павел, спасибо, что не обижаетесь и даете отличный ответ на мой вопрос. Ваша работа по улучшению сайта приветствуется.   -  person Aaron left Stack Overflow    schedule 28.08.2011


Ответы (5)


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

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

person Dirk Eddelbuettel    schedule 10.08.2010

Я рекомендую использовать 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

person Gustav Delius    schedule 02.07.2013

Чтобы расширить ответ Дирка и 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 $<`
person csgillespie    schedule 27.09.2011

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

person malecki    schedule 10.08.2010

Мое решение для многофайловых проектов в 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 и... вуаля:

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

person Og DeSouza    schedule 21.04.2018