如何在R中使用pagedown和kable打印表格,然后使用分页符

如何在R中使用pagedown和kable打印表格,然后使用分页符,r,kableextra,pagedown,R,Kableextra,Pagedown,这件事让我抓狂了好几天 我正在使用这个包编写一个具有可变长度表的报告。我最熟悉并满足于使用kableExtra表格。然而,由于存在可变长度,并且longtable选项(据我所知)是面向latex的,而不是html页面选项,因此我尝试对表块进行分组和打印。一个简化的例子是每10行写入一个表并插入相当于分页符的内容 这里是一个最小的例子。在本例中,内容可能会漏掉边距,这很好,我只关心垂直间距 --- output: pagedown::html_paged: toc: false --

这件事让我抓狂了好几天

我正在使用这个包编写一个具有可变长度表的报告。我最熟悉并满足于使用kableExtra表格。然而,由于存在可变长度,并且longtable选项(据我所知)是面向latex的,而不是html页面选项,因此我尝试对表块进行分组和打印。一个简化的例子是每10行写入一个表并插入相当于分页符的内容

这里是一个最小的例子。在本例中,内容可能会漏掉边距,这很好,我只关心垂直间距

---
output: 
  pagedown::html_paged:
    toc: false
---

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

library(ggplot2)
library(kableExtra)
library(dplyr)
```

```{r, results='asis'}
tabs <- 
  ggplot2::mpg %>%
    dplyr::group_by(grp = ceiling(row_number()/20)) %>%
    summarise(tables = list(
      kable(cur_data()) %>%
        kable_styling() %>%
        collapse_rows(1, valign = 'top'))) %>%
      select(tables) %>%
      unlist()
  
for (i in 1:length(tabs)) {
  cat(tabs[i])
  cat('\newpage  ')
}
```
---
输出:
pagedown::html_分页:
toc:错误
---
```{r设置,include=FALSE}
knitr::opts_chunk$set(echo=FALSE)
图书馆(GG2)
图书馆(kableExtra)
图书馆(dplyr)
```
```{r,results='asis'}
制表符%
dplyr::分组依据(grp=上限(行编号()/20))%>%
总结(表格=列表(
kable(cur_data())%>%
kable_样式()%>%
折叠_行(1,valign='top'))%>%
选择(表)%>%
未列出()
用于(i/1:长度(制表符)){
类别(标签[i])
目录(“\newpage”)
}
```

好吧,所以我很难定义导致页面中断的css规则,我认为这与paged.js在呈现pagedown文档时的功能有关

Pagedown生成css类
。在
之前出现分页符,您猜对了,它会呈现一个分页符

我的解决方案是在for循环内容的前面用class
分页符包装一个div

for (i in 1:length(tabs)) {
  htmltools::HTML(
    cat(
      paste0(
        div(class = 'page-break-before', tabs[i])
        )
      )
    )
}

让pagedown为我处理分页符。

好吧,所以我很难定义导致分页符的css规则,等等。我认为这与paged.js在呈现分页文档时的功能有关

Pagedown生成css类
。在
之前出现分页符,您猜对了,它会呈现一个分页符

我的解决方案是在for循环内容的前面用class
分页符包装一个div

for (i in 1:length(tabs)) {
  htmltools::HTML(
    cat(
      paste0(
        div(class = 'page-break-before', tabs[i])
        )
      )
    )
}

让pagedown为我处理分页符。

通常您在自定义样式表中为元素定义分页符。使用
knitr::kable
生成的表是经典的
table
HTML元素。如果我们想在每个表后面都有一个分页符,我们可以在样式表中定义它(例如,
custom.css
),比如

在我们的rmarkdown文档中,我们只需要包含额外的CSS样式:

---
output: 
  pagedown::html_paged:
    toc: false
    css: [default, default-page, default-fonts, custom.css]
---
请注意,我们首先包括三个默认样式表,然后添加我们的样式表

完整的文档如下所示:

---
output: 
  pagedown::html_paged:
    toc: false
    css: [default, default-page, default-fonts, test.css]
---
  
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)

library(ggplot2)
library(kableExtra)
library(dplyr)
library(knitr)
```

```{r, results = 'asis', message=F, warning=F}
tabs <- 
  ggplot2::mpg %>%
  dplyr::group_by(grp = ceiling(row_number()/20)) %>%
  summarise(tables = list(
    kable(cur_data()) %>%
      kable_styling() %>%
      collapse_rows(1, valign = 'top'))) %>%
  select(tables) 

invisible(lapply(tabs$tables, cat))
```
---
输出:
pagedown::html_分页:
toc:错误
css:[默认,默认页面,默认字体,test.css]
---
```{r设置,include=FALSE}
knitr::opts_chunk$set(echo=FALSE)
图书馆(GG2)
图书馆(kableExtra)
图书馆(dplyr)
图书馆(knitr)
```
```{r,结果='asis',消息=F,警告=F}
制表符%
dplyr::分组依据(grp=上限(行编号()/20))%>%
总结(表格=列表(
kable(cur_data())%>%
kable_样式()%>%
折叠_行(1,valign='top'))%>%
选择(表格)
不可见(Lappy(标签$tables,类别))
```
其中我使用了
invisible
来隐藏
lappy
中不需要的输出,lappy使用
cat
对每个列表项进行计算

结果如下所示:

---
output: 
  pagedown::html_paged:
    toc: false
    css: [default, default-page, default-fonts, test.css]
---
  
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)

library(ggplot2)
library(kableExtra)
library(dplyr)
library(knitr)
```

```{r, results = 'asis', message=F, warning=F}
tabs <- 
  ggplot2::mpg %>%
  dplyr::group_by(grp = ceiling(row_number()/20)) %>%
  summarise(tables = list(
    kable(cur_data()) %>%
      kable_styling() %>%
      collapse_rows(1, valign = 'top'))) %>%
  select(tables) 

invisible(lapply(tabs$tables, cat))
```

通常在自定义样式表中为元素定义分页符。使用
knitr::kable
生成的表是经典的
table
HTML元素。如果我们想在每个表后面都有一个分页符,我们可以在样式表中定义它(例如,
custom.css
),比如

在我们的rmarkdown文档中,我们只需要包含额外的CSS样式:

---
output: 
  pagedown::html_paged:
    toc: false
    css: [default, default-page, default-fonts, custom.css]
---
请注意,我们首先包括三个默认样式表,然后添加我们的样式表

完整的文档如下所示:

---
output: 
  pagedown::html_paged:
    toc: false
    css: [default, default-page, default-fonts, test.css]
---
  
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)

library(ggplot2)
library(kableExtra)
library(dplyr)
library(knitr)
```

```{r, results = 'asis', message=F, warning=F}
tabs <- 
  ggplot2::mpg %>%
  dplyr::group_by(grp = ceiling(row_number()/20)) %>%
  summarise(tables = list(
    kable(cur_data()) %>%
      kable_styling() %>%
      collapse_rows(1, valign = 'top'))) %>%
  select(tables) 

invisible(lapply(tabs$tables, cat))
```
---
输出:
pagedown::html_分页:
toc:错误
css:[默认,默认页面,默认字体,test.css]
---
```{r设置,include=FALSE}
knitr::opts_chunk$set(echo=FALSE)
图书馆(GG2)
图书馆(kableExtra)
图书馆(dplyr)
图书馆(knitr)
```
```{r,结果='asis',消息=F,警告=F}
制表符%
dplyr::分组依据(grp=上限(行编号()/20))%>%
总结(表格=列表(
kable(cur_data())%>%
kable_样式()%>%
折叠_行(1,valign='top'))%>%
选择(表格)
不可见(Lappy(标签$tables,类别))
```
其中我使用了
invisible
来隐藏
lappy
中不需要的输出,lappy使用
cat
对每个列表项进行计算

结果如下所示:

---
output: 
  pagedown::html_paged:
    toc: false
    css: [default, default-page, default-fonts, test.css]
---
  
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)

library(ggplot2)
library(kableExtra)
library(dplyr)
library(knitr)
```

```{r, results = 'asis', message=F, warning=F}
tabs <- 
  ggplot2::mpg %>%
  dplyr::group_by(grp = ceiling(row_number()/20)) %>%
  summarise(tables = list(
    kable(cur_data()) %>%
      kable_styling() %>%
      collapse_rows(1, valign = 'top'))) %>%
  select(tables) 

invisible(lapply(tabs$tables, cat))
```

为什么不将输出作为
html\u文档
?最终目标是可打印输出。pagedown的html页面输出提供了(大部分)可靠的输出,既可以在浏览器中查看,也可以打印。为什么不将输出作为
html\u文档
?最终目标是可打印的输出。pagedown的html页面输出提供了(大部分)可靠的输出,可以在浏览器中查看和打印。我不知道您可以在
摘要()中使用
kable()
@马丁施梅尔泽荣誉!我不知道您可以在
summary()中使用
kable()
@马丁施梅尔泽荣誉!