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

问题描述 投票:0回答:4

我正在使用 rmarkdown、pandoc 和 knit 创建一个包含 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))
}
```
r pdf knitr r-markdown pandoc
4个回答
43
投票

请参阅下面的简化且可重现的示例。答案和一些一般性评论:

  • 要在 Markdown 文档中动态创建新页面或部分,请在块选项中使用
    results='asis'
  • 您必须在
    \n
    之后添加换行符(
    \\pagebreak
    ),否则
    "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")
    }
    ```
    

3
投票

如何在 Rstudio .Rmd 代码块中插入分页符,使其在转换为 PDF 后仍然存在:

如果

\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.

为我制作这个:

enter image description here

关键成分是块头中的

print("<P style='page-break-before: always'>")
{r, echo=FALSE, results='asis'}


0
投票

对于投影仪演示,请在帧标题后插入

{.allowframebreaks}

这样,使用

allowframebreaks
选项创建了 LaTeX 框架环境(即
\being{frame}[allowframebreaks]

然后您可以使用

\framebreak
\pagebreak
newpage
插入换帧符。

确保应该适合一帧的绘图实际上适合一帧,否则Beamer会自动将绘图放入下一帧。您可以使用

out.height
和/或
out.width
选项在单个框架中制作绘图(请参阅 R Markdown 食谱)。

---
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")
}

0
投票

这对我有用:

cat("\\newpage")
© www.soinside.com 2019 - 2024. All rights reserved.