Ale*_*fie 3 latex r rstudio knitr r-markdown
在使用 PDF 输出选项的 RMarkdown 中,有时代码块的输出会在页面之间分割(如下面的示例所示)。这有时会产生输出的一小部分位于一页上,而较大部分位于另一页上的输出。
Microsoft Word 可以选择启用寡妇/孤儿控制选项,以防止这种分离。
如果一个部分少于一定行数,我可以在 RMarkdown 中启用任何类似的选项来合并跨页面的连续块吗?
我当前的方法涉及交叉引用输出并\newline在代码块之前放置在两个页面之间分割的代码块。显然,这是不必要的复杂并且很容易出错。
默认情况下,代码块输出放置在 Latexverbatim环境中。但是您可以使用 Latex 包中的Verbatim环境和选项(请参阅手册,第 17 页)来将代码块的整个输出放在一起。samepagefancyvrb
因此,您可以修改knitroutput钩子以使用Verbatim[[samepage=true]而不是verbatim基于chunk-option启用的钩子nobreak。
因此,如果您想要特定块的无分页行为,请将块选项设置nobreak为TRUE特定块,或者如果您想要所有块输出的无分页行为,请使用nobreak=TRUEin knitr::opts_chunk$set。
---
title: "No Page Break for Outputs"
output: pdf_document
header-includes:
- \usepackage{lipsum}
- \usepackage{fancyvrb}
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, nobreak=TRUE)
```
```{r, echo=FALSE}
library(knitr)
default_output_hook <- knit_hooks$get('output')
knit_hooks$set(
output = function(x, options) {
if(is.null(options$nobreak)) {
default_output_hook(x, options)
} else {
paste0("\\begin{Verbatim}[samepage=true]\n", x, "\n\\end{Verbatim}"
)
}
}
)
```
\lipsum[1-5]
## R code
```{r}
t.test(mpg ~ am, data=mtcars)
```
Run Code Online (Sandbox Code Playgroud)
注意:我有乳胶包lipsum只是为了生成随机文本,它与这里的问题/解决方案无关。