使用 Knit-Button 与 rmarkdown::render() 手动生成时 PDF 的差异 - 例如节号并不总是包括在内

Difference in PDFs when manually generated with Knit-Button vs rmarkdown::render() - e.g. section numbers not always included

我尝试使用 rmarkdown::render() 生成多个报告(每组 1 个),但它没有生成任何部分编号。

我为此使用了以下文件结构,以防您想重现示例(我尝试简化每个文件并仅使用必要的代码来重现错误):

*) groups.R: 在嵌套列表中定义组和子组(所有组存储在一个列表中,每个组本身就是一个列表)

groups <- list(
             list(c("subgroup1","subgroup2"),"maingroup1"),
             list(c("subgroup3","subgroup4"),"maingroup2")
          )

*) main.Rmd:报告模板

---
output:
   pdf_document:
      number_sections: true
classoption: a4paper
geometry: left=2cm,right=1cm,top=1.5cm,bottom=1cm,includeheadfoot
fontfamily: helvet
fontsize: 11pt
lang: en
header-includes:
-   \usepackage{lastpage}
-   \usepackage{fancyhdr}
-   \pagestyle{fancy}
-   \fancyhf{}
-   \fancyhead[R]{\fontsize{9}{11} \selectfont \leftmark}
-   \fancyhead[L]{\fontsize{9}{11} \selectfont Special report xxx}
-   \fancyfoot[R]{\fontsize{9}{0} \selectfont Page \thepage\ of 
\pageref{LastPage}}
---

```{r setup, include = FALSE}
knitr::opts_chunk$set(echo = 
FALSE,comment=NA,warning=FALSE,message=FALSE)
```

\thispagestyle{empty}   
\tableofcontents        

\newpage
\setcounter{page}{1}

# Introduction

Some text...

```{r results="asis"}
source("graphics.R")
```

*) graphics.R: 为每个子组生成图形(sections/section 数字是用 cat() 为每个子组生成的)

load("actgroup.RData")
source("template_graphics.R")

for (g in 1:length(act.group[[1]][[1]])) {

  subgroup.name <- act.group[[1]][[1]][g]

  cat("\clearpage")
  cat("\n# ",subgroup.name, "\n")

  template_graphics(cars)
  cat("\n\n")
  cat("\clearpage")
  template_graphics(iris)
  cat("\n\n")
  cat("\clearpage")
  template_graphics(airquality)
  cat("\n\n")
  cat("\clearpage")

  cat("\n")

}

*) template_graphics.R: 绘图模板

template_graphics <- function(data) {
  plot(data)
}

*) loop.R:用于将所有报告生成为 PDF - 每组 1 个

setwd("YOUR DIRECTORY HERE")

library(rmarkdown)
source("groups.R")

for(i in 1:length(groups)) {
  act.group = list(groups[[i]])
  save(act.group,file="actgroup.RData")
  rmarkdown::render("main.Rmd",
                output_format=pdf_document(),
                output_file=paste0("Special Report ",act.group[[1]][[2]],".pdf"),
                output_dir="~/Reports")
}

问题 是,最终文件 不显示节号。当我在 main.Rmd(按编织按钮)中手动编织时,会打印部分编号。

版本rmarkdown::render

版本knit-Button

我认为按下编织按钮也会使用 rmarkdown::render() 启动渲染过程?所以令人惊讶的是报告并不相同?

我提前安装了tinytex::install_tinytex()main.Rmd 中使用的 latex-packages 在第一次渲染时自动安装。

我不确定是什么问题。我使用 R 4.1.0 和 RStudio 2022.02.2.

感谢您的帮助!!

pdf_document() 作为 rmarkdown::render 中的 output-format 的行为导致 section-numbers 丢失。 在 main.Rmd 中的 YAML-header 中,我选择将节号保留为 number_sections: true。如果这也应该在使用 rmarkdown::render 时呈现,它必须是函数中的参数: pdf_document(number_sections=TRUE)

loop.R 的代码现在生成带有节号的 pdf:

library(rmarkdown)
source("groups.R")

for(i in 1:length(groups)) {
    act.group = list(groups[[i]])
    save(act.group,file="actgroup.RData")
    rmarkdown::render("main.Rmd",
               output_format=pdf_document(number_sections=TRUE),
               output_file=paste0("Special Report ",act.group[[1]][[2]],".pdf"),
               output_dir="~/Reports")
}

有关 pdf_document() 的更多信息可在此处找到: https://pkgs.rstudio.com/rmarkdown/reference/pdf_document.html

或者,只填写 text-reference 作为 output-format:output_format="pdf_document"。像这样设置时,YAML-Header的选项不会被覆盖,数字也包括在内。