2017-02-09 82 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