使用 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的选项不会被覆盖,数字也包括在内。
我尝试使用 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的选项不会被覆盖,数字也包括在内。