【发布时间】:2020-11-16 01:06:04
【问题描述】:
我在 RMarkdown for-loop 代码块中分配 LaTeX 环境时遇到问题。
简而言之,我编写了一个 R Markdown 文档和一系列 R 脚本,以便在漫长的数据分析管道结束时自动生成 PDF 报告。报告的主要部分可以有我使用 for 循环生成的 可变 个部分,每个部分包含一个 \subsection 标题、一个数据表和由 ggplot 生成的图。其中一些部分会很长(跨越几页),而另一些会很短(大约 1/4 页)。
目前我只是在每个 for 循环迭代的末尾插入一个 \pagebreak,但这会在较短的部分留下很多浪费的空间,所以我试图“分组”每个部分(即标题、表格和图表),以便每页可以有多个,但如果整个部分不适合,它们将跳转到新页面。
我尝试过使用figure 或minipage 环境,但由于某种原因,当包含情节时,这些命令会打印为文字;这些在标题和数据表中按预期工作,但在图像存在时无法正确返回。
我还尝试在整个小节周围创建一个 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}")
}
```
编辑添加:有趣的是,这些figure 和minipage 环境似乎在使用knitr 在.Rnw 中执行相同的示例时按预期工作......那么这是否将其缩小到Pandoc 的问题?再次感谢任何帮助!
【问题讨论】:
标签: r latex r-markdown knitr pandoc