如何使用knitr中的输出钩子格式化结果输出?

时间:2017-02-09 20:41:50

标签: r knitr beamer

我有一个包含以下内容的Rnw文件a.Rnw

\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 个答案:

答案 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}之间启动了一个新段落。逐字环境在其上方和下方添加\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