R Markdown 数字分组以防止分页

R Markdown Grouping of Figures to Prevent Pagebreak

我在 RMarkdown for-loop code-chunk.

中分配 LaTeX 环境时遇到问题

简而言之,我编写了一个 R Markdown 文档和一系列 R-scripts 来在漫长的数据分析管道结束时自动生成 PDF 报告。报告的主要部分可以有 变量 个部分,我使用 for-loop 生成这些部分,每个部分包含一个 \subsection 标题,一个数据table 和由 ggplot 生成的图。其中一些部分会很长(跨越几页),有些会很短(约 1/4 页)。

目前我只是在每个 for-loop 迭代的末尾插入一个 \pagebreak,但是这会在较短的部分中留下很多浪费的 space,所以我我正在尝试“分组”每个部分(即标题、table 和图表),以便每页 可以 多个,但如果整个部分放不下。

我试过使用 figureminipage 环境,但由于某些原因,当包含绘图时,这些命令被打印为文字文本;这些标题和数据按预期工作 table,但在图像存在的情况下无法正确返回。

我还尝试在整个小节周围创建一个 LaTeX samepage 环境(尽管不确定这对 multi-page 节是否会正确运行?)然后似乎生成了 Markdown该图在该环境中的某个地方(Pandoc?)没有被正确解释,并且由于原始 Markdown ![]... 图像标记而在编译 TeX 时抛出错误。

最后,我还尝试在该小节的各个点实施 \pagebreak[x]\nopagebreak[y] 提示,但似乎无法使这些提示产生所需的分页行为。

我生成了一个重现我的问题的 MWE。

我真的很感激任何关于如何解决这个问题的建议,或者更好的方法来处理以这种动态方式生成的元素的“分组”?

---
title: "Untitled"
author: "I don't know what I'm doing"
date: "26/07/2020"
output:
  pdf_document: 
    latex_engine: xelatex
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, dev = "cairo_pdf")
```

```{r cars, results='asis'}

for (i in 1:5){
  cat("\begin{figure}")  
    cat(paste0("\subsection{This is subsection ",i,"}"))
    cat("\Huge Here's some bulk text that would represent a data table... kasvfkwsvg fiauwe grfiwgiu iudaldbau iausbd ouasbou asdbva asdbaisd i iuahihai hiuh iaiuhqijdblab ihlibljkb liuglugu h  uhi uhi uhqw iuh qoijhoijoijoi qwegru wqe grouw egq\newline")
    plot(mtcars$wt,mtcars[,i])
  cat("\end{figure}")  
}
```

编辑添加:有趣的是,这些 figureminipage 环境似乎在使用 knitr 在 .Rnw 中执行相同示例时按预期工作...所以缩小归结为 Pandoc 的问题?再次感谢您的帮助!

发生的事情是原始 TeX 命令在通过 Markdown 时不被视为 TeX。您可以通过将相关片段明确标记为 LaTeX 来解决此问题:

for (i in 1:5){
  cat("`\begin{figure}`{=latex}")  
    cat(paste0("\subsection{This is subsection ",i,"}"))
    cat("\Huge Here's some bulk text that would represent a data table... kasvfkwsvg fiauwe grfiwgiu iudaldbau iausbd ouasbou asdbva asdbaisd i iuahihai hiuh iaiuhqijdblab ihlibljkb liuglugu h  uhi uhi uhqw iuh qoijhoijoijoi qwegru wqe grouw egq\newline")
    plot(mtcars$wt,mtcars[,i])
  cat("`\end{figure}`{=latex}")  
}

有关详细信息,请参阅 pandoc 手册中的 generic raw attribute 部分。