【问题标题】:Unevaluated chunk in knitr generates a line breakknitr 中未评估的块生成换行符
【发布时间】:2018-01-03 08:10:54
【问题描述】:

以下Rnw 文件产生如下所示的输出。有没有一种干净的方法来防止第 2 节中的换行符? 当然,这只是一个最小的可重现示例;我不想删除未评估的块,这在我的实际问题中以编程方式评估或未评估。

\documentclass{article}

<<setup, include=FALSE>>=
knitr::opts_chunk$set(echo = FALSE)
@

\begin{document}

\section{eval TRUE}

<<results='asis'>>=
cat("Hello.")
@
<<eval=TRUE, results='asis'>>=
cat("How are you?")
@
What's your name?


\section{eval FALSE}

<<results='asis'>>=
cat("Hello.")
@
<<eval=FALSE, results='asis'>>=
cat("How are you?")
@
What's your name?

\end{document}

编辑

到目前为止,我有一个解决方案:

<<results='asis'>>=
cat("Hello.")
if(FALSE) cat("How are you?")
@
What's your name?

但我想知道是否有更简单的,不需要像这样将块分组到一个单独的一个。

【问题讨论】:

    标签: r latex knitr sweave


    【解决方案1】:

    有趣的是,不管所有选项,knitr 显然为每个块打印至少一个换行符(即使eval = FALSE, echo = FALSE, results = "hide")。因此,以下只是一种解决方法,但可能比问题中的解决方法更简洁:

    在块中使用if(代替块选项eval)但如果不应该评估块,则打印%。这将使 TEX 忽略该行。

    \documentclass{article}
    
    <<setup, include=FALSE>>=
      knitr::opts_chunk$set(echo = FALSE)
      showIt <- FALSE
    @
    
    \begin{document}
    
    \section{eval FALSE}
    
    <<results='asis'>>=
      cat("Hello.")
    @
    <<results='asis'>>=
      if(showIt) {
        cat("How are you?")
      } else {
        cat("%")
      }
    @
    What's your name?
    
    \end{document}
    

    【讨论】:

    • 谢谢,这个主意不错。我怀疑我们可以做得更好,所以我接受答案。谢谢。
    • @StéphaneLaurent 您可以尝试提交错误报告/功能请求。或许亿辉能帮到你……
    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    相关资源
    最近更新 更多