我一直在尝试使用knitr
来解决以下问题。
在\LaTeX
我希望定义一个名为myplot
的块(一次)。
然后我想说点如下:
代码
<<myplot, tidy = FALSE>>=
plot(runif(9), runif(9),
xlab = "x",
ylab = "y",)
@
结果为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}
我知道如何在Sweave中执行此操作但似乎无法在knitr
中执行此操作。
也就是说,读取器可以看到代码块。
你能给我任何建议吗?
提前致谢。
托马斯
答案 0 :(得分:4)
这是knitr
和Sweave之间的一个区别:默认情况下,Sweave不会保留图表(除非您指定fig=TRUE
),但knitr
会这样做(除非您真的不想要它们,使用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}
虽然到目前为止问题已经解决,但我还有一些其他意见:
knitr
(>= 1.1
)时,您应该能够看到有关代码块语法的警告,并且您需要致电Sweave2knitr()
来解决问题;您会发现width
和height
在knitr
中不是有效的块选项(使用fig.width
和fig.height
);见here for more information myplot
,我会使用eval=FALSE
,因为您可能不想两次评估代码; knitr
,您实际上可以通过块选项执行所有操作,例如
<<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",)
@
这为您提供center
和figure
环境,并自动生成标签fig:myplot
。