سؤال

أنا أكتب أطروحتي في 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) الذي يحمل قطعة تعمل على تشغيل البرنامج النصي مع تحليل البيانات والقطع التي تنتج مخرجات PDF من الرسوم البيانية التي قمت بتضمينها عبر \includegraphics (على سبيل المثال ، rslts.tex). ما زلت تتبع؟

إذا قمت بتشغيل RNW (أي أعيدت تسميتها rslts.tex إلى rslts.Rnw) بدون "رابط" للجزء مع البرنامج النصي ، ستحصل على ملف Sweave() خطأ في قول المرجع في \Sexpr{} غير موجود. هل هناك طريقة ، دون دمج جميع الملفات في .rnw واحدة ، للاتصال \Sexpr{} في القول rslts.Rnw?

أساليب أخرى كيفية تحقيق هذا موضع ترحيب.

هل كانت مفيدة؟

المحلول

ننسى لثانية أنك تتعامل مع Sweave وفكر فقط في مشكلة اللاتكس - التي \include و \includeonly تقديم الحلول. جرب ذلك مع بعض ملفات الاختبار البسيطة.

بمجرد أن تكون قد تم اكتشافها ، قم بإعادة الانحناء إلى هذا المزيج وأنه يعمل فقط لأن Sweave هو "مجرد" خطوة معالجة مسبقة ، وإن كانت ذكية للغاية.

نصائح أخرى

أوصي باستخدام rstudio (http://www.rstudio.com/ide/). تم دمج Sweave بشكل جيد في هذا IDE ويدعم مستندات متعددة الملفات. حتى Synctex و Tex Error Log لا يزال يعمل عند العمل مع مستندات متعددة الملفات.

من الملف الرئيسي ، يمكنك تضمين ملفات الأطفال باستخدام

\SweaveInput{Child.Rnw}

يمكنك ربط ملف الطفل مرة أخرى إلى الملف الرئيسي من خلال تضمين التوجيه

% !Rnw root = Master.Rnw

في ملف الطفل. وبهذه الطريقة عند العمل على ملف الطفل ونشاده ، تعرف rstudio على Typeet الملف الرئيسي.

تم شرح التفاصيل في وثائق RSTUDIO في http://www.rstudio.com/ide/docs/authoring/multiple_rnw_files

لتوسيع إجابة ديرك و 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 $<`

إحدى الإجابة الواضحة إلى حد ما هي استخدام Makefile ، وربما باستخدام Package Cachesweave ، لمعالجة الملفات ذات الصلة بالترتيب الصحيح.

إن حلي لمشاريع متعدد الملفات في 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. يرجى ملاحظة أنه في الفرعية لك لا تستخدم أوامر preambular مثل \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á:

لقطة الشاشة للملف الذي تم إنشاؤه بواسطة الأمر أعلاه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top