2017-02-09 84 views
2

我有一个RNW文件a.Rnw具有以下内容:如何在knitr中使用输出钩子来格式化输出结果?

\documentclass{beamer} 
\begin{document} 
\begin{frame}[fragile] 
<<>>= 
1+1 
@ 
\end{frame} 
\end{document} 

我产生一个PDF文件通过

Rscript -e 'knitr::knit("a.Rnw")' 
pdflatex a.tex 

a.pdf输出看起来是这样的:

Output of knitr chunk

如何我得到的输出是这样的:

R> 1+1 
## [1] 2 

也就是说,我该如何将R>放在R代码的前面,并删除代码和输出之间的空行?

回答

1

要在所有R命令前面显示R>,我使用options设置R提示符,并告诉knitr使用opts_chunk(答案底部的代码)显示提示。

摆脱新线是有点棘手,因为将R代码和R输出生成的TEX文件看起来像这样:

\begin{alltt} 
\hlstd{R> }\hlnum{1}\hlopt{+}\hlnum{1} 
\end{alltt} 
\begin{verbatim} 
## [1] 2 
\end{verbatim} 

所以没有被明确生成的R代码和输出之间的换行符由knitr,但是由于\end{alltt}\begin{verbatim}之间的新段落。逐字环境在其上方和下方添加当前值\topsepsee 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} 

和输出看起来是这样的:

pdf generated by knitr with reduced whitespace between R code and output

+0

我试过几种方法来缩小R-输出间距:这是工作的第一个! ''\ renewenvironment {knitrout} {etc.'' – PatrickT