【问题标题】:R Markdown Grouping of Figures to Prevent PagebreakR Markdown对数字进行分组以防止分页
【发布时间】:2020-11-16 01:06:04
【问题描述】:

我在 RMarkdown for-loop 代码块中分配 LaTeX 环境时遇到问题。

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

目前我只是在每个 for 循环迭代的末尾插入一个 \pagebreak,但这会在较短的部分留下很多浪费的空间,所以我试图“分组”每个部分(即标题、表格和图表),以便每页可以有多个,但如果整个部分不适合,它们将跳转到新页面。

我尝试过使用figureminipage 环境,但由于某种原因,当包含情节时,这些命令会打印为文字;这些在标题和数据表中按预期工作,但在图像存在时无法正确返回。

我还尝试在整个小节周围创建一个 LaTeX samepage 环境(尽管不确定这在多页部分中是否会正确运行?)然后似乎为情节生成的 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 的问题?再次感谢任何帮助!

【问题讨论】:

    标签: r latex r-markdown knitr pandoc


    【解决方案1】:

    发生的情况是原始 TeX 命令在通过 Markdown 时不会被视为 TeX。您可以通过将相关的 sn-ps 显式标记为 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 部分。

    【讨论】:

    • 这很有趣,而且我以前没有遇到过。为什么 Markdown 不将这些行特别视为原始 TeX,而其他元素可以代替它们?为什么似乎包含破坏它的情节?稍后我会在我的真实脚本上尝试一下,并将其标记为答案。非常感谢!
    • 我不完全确定为什么图形环境不被识别为 LaTeX。但这实际上是更好的,因为如果是这样,环境的全部内容将被视为 LaTeX。那会很糟糕,因为 knitr 生成 Markdown,而不是 TeX;该文档可能根本无法编译。
    • 这很好...非常感谢您的帮助和 pandoc 文档的链接,这对理解您的答案的语法非常有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2016-11-06
    • 1970-01-01
    相关资源
    最近更新 更多