以下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?
但是我想知道是否有一个更简单的,不需要像这样将一个块分组。
答案 0 :(得分: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}