在rmarkdown中的代码块中插入分页符(转换为PDF)

lyr7nygr  于 2023-05-20  发布在  其他
关注(0)|答案(3)|浏览(188)

我正在使用rmarkdown,pandoc和knitr创建一个包含大量r代码的pdf。在一个代码块中,我有一个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))
}
nzkunb0c

nzkunb0c1#

参见下面的简化和可再现的示例。答案和一些一般性评论:

  • 要在markdown文档中动态创建新的页面或节,请在chunk选项中使用results='asis'
  • 您必须在\\pagebreak之后添加一个换行符(\n),否则"ValueForV"将直接粘贴在"\linebreak"之后,这将导致Undefined control sequence错误。
  • 确保\newpage\pagebreak在一个单独的行中,之前使用了换行符\n
  • 转义\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")
}
hk8txs48

hk8txs482#

如何在转换为PDF后仍然存在的Rstudio.rmd代码块中插入分页符:

如果\newpage\pagebreak latex宏对您不起作用,这里有一个使用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.


为我制作这个:

![](https://i.stack.imgur.com/lqdSU.png)

关键成分是chunk header中的`print("<P style='page-break-before: always'>")`和`{r, echo=FALSE, results='asis'}`。
flvlnr44

flvlnr443#

对于beamer演示,在帧头后插入{.allowframebreaks}
通过这种方式,使用allowframebreaks选项(即,\being{frame}[allowframebreaks].
然后,您可以使用\framebreak\pagebreaknewpage来插入帧分割符。
确保应该适合一帧的图实际上适合一帧,否则beamer将自动将图放入下一帧。您可以使用out.height和/或out.width选项(请参见R Markdown cookbok)使打印适合单个帧。

---
title: "test"
output: beamer_presentation
---

# Test {.allowframebreaks}

```{r, echo=FALSE, results='asis', out.height="80%"}
for (i in 1:3) {
  print(ggplot2::qplot(i, i+1))
  cat("\n\n\\framebreak\n")
  writeLines("ValueForV")
}

相关问题