I've been trying to solve the following problem using knitr
. In \\LaTeX
I wish to define a chunk (once) called myplot
. Then I want to say something such as:
The code
<<myplot, tidy = FALSE>>=
plot(runif(9), runif(9),
xlab = "x",
ylab = "y",)
@
results in Figure~\\ref{fig:myownlabel}
.
\begin{figure}[hh]
\begin{center}
<<myplotfig, out.width='.50\\linewidth', width=6.6, height=4.8, echo=FALSE>>=
par(las = 1, mfrow = c(1, 1), mar = c(5, 4, 1, 1)+0.1)
<<myplot>>
@
\caption{
I insist to have the caption in \LaTeX.
\label{fig:myownlabel}
}
\end{center}
\end{figure}
I know how to do it in Sweave but cannot seem to do it in knitr
. That is, the code chunk is seen by the reader. Can you give me any suggestions? Thanks in advance. Thomas
This is one difference between knitr
and Sweave: Sweave does not keep plots by default (unless you specify fig=TRUE
), but knitr
does (unless you really do not want them, using fig.keep='none'
).
<<myplot, tidy = FALSE, fig.keep = 'none'>>=
plot(runif(9), runif(9),
xlab = "x",
ylab = "y",)
@
\begin{figure}[hh]
\begin{center}
<<myplotfig, out.width='.50\\linewidth', fig.width=6.6, fig.height=4.8, echo=FALSE>>=
par(las = 1, mfrow = c(1, 1), mar = c(5, 4, 1, 1)+0.1)
<<myplot>>
@
\caption{
I insist to have the caption in \LaTeX.
\label{fig:myownlabel}
}
\end{center}
\end{figure}
Although the problem has been solved so far, I have a few other comments:
knitr
( >= 1.1
), you should be able to see a warning about the syntax of your code chunks, and you are required to call Sweave2knitr()
to fix the problems; you will realize width
and height
are not valid chunk options in knitr
(use fig.width
and fig.height
); see here for more information myplot
, I would use eval=FALSE
because you probably do not want to evaluate the code twice; with knitr
, you can actually do everything through chunk options, eg
<<myplot, tidy=FALSE, eval=FALSE, echo=-1>>= @ <<myplot, out.width='.5\\\\linewidth', fig.width=6.6, fig.height=4.8, fig.align='center', echo=FALSE, fig.pos='hh', fig.cap='I insist to have the caption in \\\\LaTeX.'>>= par(las = 1, mfrow = c(1, 1), mar = c(5, 4, 1, 1)+0.1) plot(runif(9), runif(9), xlab = "x", ylab = "y",) @
this gives you both the center
and figure
environments, and produces a label fig:myplot
automatically.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.