[R] Sweave: R chunk inside caption?
Marc Schwartz
marc_schwartz at me.com
Tue Aug 21 21:35:19 CEST 2012
On Aug 21, 2012, at 2:03 PM, Alexander Shenkin <ashenkin at ufl.edu> wrote:
> Hi Folks,
>
> I'm surprised, but I didn't find this question addressed anywhere. I'd
> like to generate a LaTeX caption with R code. I've tried the code
> below, but I get the following TeX error:
>
> ! Argument of \@caption has an extra }.
> <inserted text>
> \par
> l.21 }
>
> Any thoughts? Perhaps I'll have to write the "\caption{}" text with R?
>
> thanks!
>
>
> Sweave document:
>
> \documentclass{article}
> \title {test}
> \author {me}
> \usepackage{Sweave}
> \begin {document}
> \maketitle
> \DeclareGraphicsExtensions{.pdf,.png}
>
> \begin {figure}
> <<label=fig1, echo=FALSE, fig=TRUE, pdf=false, png=true>>=
> plot(runif(100), runif(100))
> @
> \caption {
> This is the caption with some r-code
> <<>>=
> 2*2
> @
> }
> \label {fig:1}
> \end {figure}
>
> \end{document}
>
>
> TeX document:
>
> \documentclass{article}
> \title {test}
> \author {me}
> \usepackage{Sweave}
> \begin {document}
> \maketitle
> \DeclareGraphicsExtensions{.pdf,.png}
> \begin {figure}
> \includegraphics{test-fig1}
> \caption {
> This is the caption with some r-code
> \begin{Schunk}
> \begin{Sinput}
>> 2*2
> \end{Sinput}
> \begin{Soutput}
> [1] 4
> \end{Soutput}
> \end{Schunk}
> }
> \label {fig:1}
> \end {figure}
> \end{document}
You can use \Sexpr{} to include R code within the LaTeX, but the code needs to return a scalar.
For example:
\documentclass{article}
\usepackage{Sweave}
\begin{document}
\begin{figure}[tbp]
\centering
<<fig=TRUE,width=6,height=6>>=
plot(1:10)
@
\caption{This is the caption \Sexpr{round(sqrt(2), 2)} with an R scalar included}
\end{figure}
\end{document}
will return:
\documentclass{article}
\usepackage{Sweave}
\begin{document}
\begin{figure}[tbp]
\centering
\begin{Schunk}
\begin{Sinput}
> plot(1:10)
\end{Sinput}
\end{Schunk}
\includegraphics{caption-001}
\caption{This is the caption 1.41 with an R scalar included}
\end{figure}
\end{document}
In general, if the R code is not very simple (eg. it is multiple lines/function calls, etc.), I will generally have the R code in an R chunk, assign the result to a scalar and then include that scalar in the \Sexpr{}:
This is referenced in the Sweave manual and FAQ:
http://www.statistik.lmu.de/~leisch/Sweave/
Regards,
Marc Schwartz
More information about the R-help
mailing list