[R] Sweave: R chunk inside caption?

Yihui Xie xie at yihui.name
Tue Aug 21 21:48:03 CEST 2012


This is a LaTeX question. I'll be surprised if \caption{} allows
arbitrary LaTeX environments inside it.

Perhaps it is irrelevant, but you can make it more compact with the
fig.cap option in knitr; see an example at
https://github.com/yihui/knitr-examples/blob/master/019-fig-caption.Rnw

\documentclass{article}
\begin{document}

Knitr can automatically generate a figure environment if fig.cap is specified.

<<test, fig.cap=paste('$2 \\times 2$ is', 2*2), fig.height=3>>=
par(mar=c(4, 4, .1, .1)); plot(runif(4))
@

When fig.cap needs to use objects in the current chunk, we need to set
the eval.after options so the objects are available when fig.cap is
used.

<<setup>>=
# evaluate fig.cap after a chunk is evaluated
opts_knit$set(eval.after = 'fig.cap')
@

Dynamically generate a figure caption:

<<t-test, fig.cap=paste('The P-value is', format.pval(t.test(x)$p.value))>>=
x = rnorm(30)
hist(x)
@

\end{document}

Regards,
Yihui
--
Yihui Xie <xieyihui at gmail.com>
Phone: 515-294-2465 Web: http://yihui.name
Department of Statistics, Iowa State University
2215 Snedecor Hall, Ames, IA


On Tue, 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}




More information about the R-help mailing list