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