【问题标题】:Inserting a page break within a code chunk in rmarkdown (converting to pdf)在 rmarkdown 的代码块中插入分页符(转换为 pdf)
【发布时间】:2015-10-28 03:19:35
【问题描述】:

我正在使用 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))
}
```

【问题讨论】:

    标签: r pdf knitr r-markdown pandoc


    【解决方案1】:

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

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

    【讨论】:

    • 恐怕还是只打印\newpage,前面多了2个空行
    • 这很奇怪..您能否编辑您的问题并提供一个最小且可重现的示例?
    • 我在调用函数本身时忘记添加 results='asis'。但是现在没有生成pdf,并且这个错误给出了“!未定义的控制序列。l.105 \newpageDW”
    • 首先,请参阅here,了解如何提供可重现的示例。如果只有部分代码,真的很难找到错误。正题:你逃过\newpage(即\\newpage)吗?
    • 好的,找到问题了。正如您在我的代码中看到的那样,我在创建 \newpageValueForV 的 cat 之后直接使用 writeLines(v)。在 \n\n\\newpage 之后插入 \n 可以解决此问题。你想调整你的答案以反映这种情况吗?然后我可以标记为正确
    【解决方案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("&lt;P style='page-break-before: always'&gt;"){r, echo=FALSE, results='asis'}

    【讨论】:

    • 我得到 [1] ”” 应该分页符的位置,但没有分页符。
    猜你喜欢
    • 2022-11-26
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2019-12-08
    • 2019-04-04
    • 2015-02-15
    相关资源
    最近更新 更多