Вставка разрыва страницы в фрагменте кода в rmarkdown (преобразование в pdf)

Я использую rmarkdown, pandoc и knitr для создания pdf файла, включая фрагменты кода r. Внутри блока кода у меня есть цикл for, который печатает несколько графиков и некоторый статистический вывод.

Я хотел бы вставить разрыв страницы в цикл (чтобы появиться в выходном файле pdf). Этот разрыв страницы будет возникать после печати каждого графика, чтобы каждый график печатался на одной странице, а статистический вывод - на следующем.

Мне не удалось найти способ включения разрыва страницы в мой фрагмент кода r. Я пробовал cat("\\newpage") и cat("\\pagebreak") в надежде, что он будет распознан pandoc, но безрезультатно (он просто напечатан дословно в окончательном pdf).

Предложения оценены. Вот код, который у меня есть до сих пор:

```{r, echo =FALSE, message=FALSE, warning=FALSE, comment=NA, results='asis'}
library("markdown") 
library("rmarkdown") 
library("knitr")
library("ggplot2")
for (v in Values){

# read in file
testR <- read.csv(file.path, header=T)

print(ggplot(testR, aes(x=Time, y=Value, color=Batch)) + geom_point(size = 3) +
xlab ("Timepoint") +
ylab (v) +
scale_x_continuous(breaks=seq(0, 60, by=6)) +
ggtitle(paste("Scatterplot of Batches for ", v, sep="")))
ggsave(paste(timestamp, "__", 
       "Scatterplot of Batches for ", v, ".jpeg", sep = "")) 

cat("\\pagebreak")
writeLines(v)
writeLines("\n")
writeLines("\n Test for homogenity of slopes \n")
av1 <- aov(Value~Time*Batch, data=testR)
print(summary(av1))
}
```

Ответ 1

См. ниже приведенный и воспроизводимый пример. Ответ и некоторые общие замечания:

  • Для динамического создания новых страниц или разделов в документе уценки используйте results='asis' в параметрах фрагмента.
  • Вам нужно добавить строку (\n) после \\pagebreak или иначе "ValueForV" будет вставлена ​​непосредственно после "\linebreak", что приведет к ошибке Undefined control sequence.
  • Удостоверьтесь, что \newpage и \pagebreak находятся в отдельной строке, используя ранее используемые строки \n.
  • Escape \newpage и \pagebreak (т.е. \\newpage, \\pagebreak).

    ---
    title: "test"
    output: pdf_document
    ---
    
    ```{r, echo=FALSE, results='asis'}
    for (i in 1:3) {
      print(ggplot2::qplot(i, i+1))
      cat("\n\n\\pagebreak\n")
      writeLines("ValueForV")
    }
    ```
    

Ответ 2

Как вставить разрыв страницы в фрагмент кода Rstudio.Rmd, который выживает при конвертации в PDF:

Если макросы \newpage и \pagebreak латекс не работают для вас, обходной путь с использованием HTML.

Например:

---
title: "The Rent"
output:
  pdf_document: default
  html_document: default
---

# This is pre-chunk text.

```{r, echo=FALSE, results='asis'}
print("Now we're <b>inside the chunk</b>, using the power of HTML.<br><br><br>!")

print("As you can see from the following diagram")
cat("\n")
print("The rent...<br>")
print(plot(1:10))

print("<P style='page-break-before: always'>")    #forced new-page happens here.

print("<h1>Is too damned high!!</h1>")
writeLines("\n")
print("Finished")
cat("\n\n")
```
This is post chunk text.

Производит это для меня:

введите описание изображения здесь

Ключевыми компонентами являются print("<P style='page-break-before: always'>") и {r, echo=FALSE, results='asis'} в заголовке блока.