我有一个包含以下内容的Rnw文件a.Rnw
:
\documentclass{beamer}
\begin{document}
\begin{frame}[fragile]
<<>>=
1+1
@
\end{frame}
\end{document}
我通过
制作pdfRscript -e 'knitr::knit("a.Rnw")'
pdflatex a.tex
a.pdf
中的输出如下所示:
如何使输出看起来像这样:
R> 1+1
## [1] 2
也就是说,如何将R>
放在R代码前面并删除代码和输出之间的空白行?
答案 0 :(得分:1)
要在所有R命令前显示R>
,我使用options
设置R提示,并告诉knitr使用opts_chunk
显示提示(答案底部的代码)。< / p>
删除新行有点棘手,因为生成的tex文件中的R代码和R输出如下所示:
\begin{alltt}
\hlstd{R> }\hlnum{1}\hlopt{+}\hlnum{1}
\end{alltt}
\begin{verbatim}
## [1] 2
\end{verbatim}
因此,R代码与其输出之间的换行不是由knitr明确生成的,而是由于在\end{alltt}
和\begin{verbatim}
之间启动了一个新段落。逐字环境在其上方和下方添加\topsep
(see here)的当前值。因此,我修补了knitrout
环境,使此变量在本地设置为0pt
。以下是a.Rnw
的新版本:
\documentclass{beamer}
% reduce whitespace between R code and R output
\let\oldknitrout\knitrout
\renewenvironment{knitrout}{
\begin{oldknitrout}
\topsep=0pt
}{
\end{oldknitrout}
}
% show R> prompt before R commands
<<r setup, echo=FALSE>>=
options(prompt='R> ')
knitr::opts_chunk$set(prompt=TRUE)
@
\begin{document}
\begin{frame}[fragile]
<<>>=
1+1
@
\end{frame}
\end{document}
,输出如下: