Inserting a page break within a code chunk in rmarkdown (converting to pdf)
Solution 1
See below a reduced and reproducible example. The answer and some general remarks:
- To dynamically create new pages or sections in a markdown document use
results='asis'
in the chunk options. - You have to add a linebreak (
\n
) after\\pagebreak
or else"ValueForV"
will be pasted directly after"\linebreak"
, which results in anUndefined control sequence
error. - Make sure that
\newpage
and\pagebreak
are in a separate line by using linebreaks\n
before. -
Escape
\newpage
and\pagebreak
(i.e.,\\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") } ```
Solution 2
How to insert a page break within an Rstudio .Rmd code chunk that survives conversion to PDF:
If the \newpage
and \pagebreak
latex macros aren't working for you, here's a workaround using HTML.
For example:
---
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.
Produces this for me:
The key ingredients is the print("<P style='page-break-before: always'>")
and the {r, echo=FALSE, results='asis'}
in the chunk header.
Rachel
Updated on August 26, 2020Comments
-
Rachel over 3 years
I am using rmarkdown, pandoc and knitr to create a pdf including chunks of r code. Within a code chunk I have a for loop which prints a number of graphs and some statistical output.
I would like to insert a page break into the loop (to appear in the pdf output). This page break would occur after each graph is printed, to ensure each graph is printed on one page and the statistical output on the next.
I have been unable to find a way of including a page break in my r code chunk. I have tried
cat("\\newpage")
andcat("\\pagebreak")
in the hopes it would be recognized by pandoc but to no avail (it is just printed verbatim in the final pdf).Suggestions appreciated. Here is the code I have so far:
```{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)) } ```