Building TeX file from knitr Rnw as child of larger parent TeX file to use R objects and output

knitr has a few pretty straightforward ways of handling this.

Option 1: Using knit_child() with inline R code

Say your setup is like the following. In the same directory, you have:

graph.R

## ---- graph
library(ggplot2)
CarPlot <- ggplot() +
    stat_summary(data= mtcars,
                 aes(x = factor(gear),
                     y = mpg
                 ),
                 fun.y = "mean",
                 geom = "bar"
                 )
CarPlot

chapter1.Rnw

Hey, look, a graph (Figure~\ref{fig:graph})!

<<graph, echo=FALSE, message=FALSE, fig.lp='fig:', out.width='.5\\linewidth', fig.align='center', fig.cap="A graph", fig.pos='h!'>>=
@

main.Rnw

\documentclass{article}

\begin{document}

<<external-code, echo=FALSE, cache=FALSE>>=
read_chunk('./graph.R')
@

\Sexpr{knit_child('chapter1.Rnw')}

\end{document}

Then, you can knit the main.Rnw file and compile the resulting .tex file with either pdflatex or xelatex.

The output is:

enter image description here

Note that you can also read the external .R file from the child .Rnw file.

So, the following would have worked just as well.

chapter1-mod.Rnw

<<external-code, echo=FALSE, cache=FALSE>>=
read_chunk('./graph.R')
@

Hey, look, a graph (Figure~\ref{fig:graph})!

<<graph, echo=FALSE, message=FALSE, fig.lp='fig:', out.width='.5\\linewidth', fig.align='center', fig.cap="A graph", fig.pos='h!'>>=
@

main-mod.Rnw

\documentclass{article}

\begin{document}

\Sexpr{knit_child('chapter1-mod.Rnw')}

\end{document}

Option 2: Using chunk option child

Assuming you have graph.R and chapter1.Rnw from above in the same directory, then your main.Rnw should be:

\documentclass{article}

\begin{document}

<<external-code, echo=FALSE, cache=FALSE>>=
read_chunk('./graph.R')
@

<<child-demo, child='chapter1.Rnw'>>=
@

\end{document}

Note that you can also read the external .R file from within the child document in this case, too.

So, assuming you had graph.R and chapter1-mod.Rnw from above in the same directory, then your main-mod.Rnw file should be:

\documentclass{article}

\begin{document}

<<child-demo, child='chapter1-mod.Rnw'>>=
@

\end{document}

You can put the preambule from the knitr file in your file. Or in another file named preamb.tex for example call by \input{preamb}.

----preamb.tex----%% 
maxwidth is the original width if it is less than linewidth
%% otherwise use linewidth (to make sure the graphics do not exceed the margin)
\makeatletter
\def\maxwidth{ %
  \ifdim\Gin@nat@width>\linewidth
    \linewidth
  \else
    \Gin@nat@width
  \fi
}
\makeatother

\definecolor{fgcolor}{rgb}{0.345, 0.345, 0.345}
\newcommand{\hlnum}[1]{\textcolor[rgb]{0.686,0.059,0.569}{#1}}%
\newcommand{\hlstr}[1]{\textcolor[rgb]{0.192,0.494,0.8}{#1}}%
\newcommand{\hlcom}[1]{\textcolor[rgb]{0.678,0.584,0.686}{\textit{#1}}}%
\newcommand{\hlopt}[1]{\textcolor[rgb]{0,0,0}{#1}}%
\newcommand{\hlstd}[1]{\textcolor[rgb]{0.345,0.345,0.345}{#1}}%
\newcommand{\hlkwa}[1]{\textcolor[rgb]{0.161,0.373,0.58}{\textbf{#1}}}%
\newcommand{\hlkwb}[1]{\textcolor[rgb]{0.69,0.353,0.396}{#1}}%
\newcommand{\hlkwc}[1]{\textcolor[rgb]{0.333,0.667,0.333}{#1}}%
\newcommand{\hlkwd}[1]{\textcolor[rgb]{0.737,0.353,0.396}{\textbf{#1}}}%

\usepackage{framed}
\makeatletter
\newenvironment{kframe}{%
 \def\at@end@of@kframe{}%
 \ifinner\ifhmode%
  \def\at@end@of@kframe{\end{minipage}}%
  \begin{minipage}{\columnwidth}%
 \fi\fi%
 \def\FrameCommand##1{\hskip\@totalleftmargin \hskip-\fboxsep
 \colorbox{shadecolor}{##1}\hskip-\fboxsep
     % There is no \\@totalrightmargin, so:
     \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
 \MakeFramed {\advance\hsize-\width
   \@totalleftmargin\z@ \linewidth\hsize
   \@setminipage}}%
 {\par\unskip\endMakeFramed%
 \at@end@of@kframe}
\makeatother

\definecolor{shadecolor}{rgb}{.97, .97, .97}
\definecolor{messagecolor}{rgb}{0, 0, 0}
\definecolor{warningcolor}{rgb}{1, 0, 1}
\definecolor{errorcolor}{rgb}{1, 0, 0}
\newenvironment{knitrout}{}{} % an empty environment to be redefined in TeX

\usepackage{alltt}
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}