【问题标题】:How to format output of results using output hooks in knitr?如何使用 knitr 中的输出挂钩格式化结果输出?
【发布时间】:2017-06-28 00:56:19
【问题描述】:

我有一个 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&gt;放在R代码前面,去掉代码和输出之间的空行?

【问题讨论】:

    标签: r knitr beamer


    【解决方案1】:

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

    摆脱新行有点棘手,因为生成的 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}
    

    输出如下所示:

    【讨论】:

    • 我尝试了几种方法来缩小 R 输出间距:这是第一个有效的方法! \renewenvironment{knitrout}{etc.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2017-02-04
    • 2015-02-23
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多