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

How to format output of results using output hooks in knitr?

我有一个包含以下内容的 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 中的输出如下所示:

如何使输出看起来像这样:

R> 1+1
## [1] 2

也就是我如何在R代码前面加上R>,去掉代码和输出之间的空行?

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

删除新行有点棘手,因为生成的 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} 之间开始了一个新段落。 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}

输出如下所示: