knitr 中未评估的块会生成换行符

Unevaluated chunk in knitr generates a line break

以下 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?

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

有趣的是,不管所有选项如何,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}