如何阻止 kable 重复一行到页面末尾
How to stop kable from repeating one row to the end of the page
如标题所示,我写了一个 Rmarkdown 文件来打印 table,出于我无法理解的原因,它占用了 table 的第一行并重复它直到结束已到达页面:
似乎 table 以某种方式设置为固定宽度,但我不确定为什么会这样,我也不确定为什么只有一行重复。我希望它看起来很正常。未被 table 覆盖的页面的其余部分可以只是空白。感谢您的帮助。
我试过在 kable_styling
中修改 full_width
参数,这并没有什么不同。
这是一个可重现的例子。这是 header:
---
title: ""
always_allow_html: yes
output:
pdf_document:
latex_engine: xelatex
geometry: margin=0.3in
header-includes:
- \usepackage[T1]{fontenc}
- \usepackage{array}
- \usepackage{booktabs}
- \usepackage{xcolor}
- \usepackage{makecell}
- \usepackage{longtable}
- \usepackage{multirow}
- \usepackage{wrapfig}
- \usepackage{float}
- \usepackage{colortbl}
- \usepackage{pdflscape}
- \usepackage{tabu}
- \usepackage{threeparttable}
- \usepackage{threeparttablex}
- \usepackage[normalem]{ulem}
- \usepackage{makecell}
- \setmainfont{Helvetica}
- \pagenumbering{gobble}
- \DeclareTextCommand{\nobreakspace}{TU}{\leavevmode\nobreak\ }
documentclass: article
classoption: a4paper
---
这是重现问题的 R 块,注意我使用了设置 {r, echo=FALSE, message = FALSE, warning = FALSE}
。
# Packages
suppressMessages(library(extrafont))
suppressMessages(library(dplyr))
suppressMessages(library(pander))
suppressMessages(library(kableExtra))
# Data
table_info <- data.frame(a=1:4, b=1:4, c=1:4, d=1:4, e=1:4, f=1:4, g=1:4, h=1:4, i=1:4)
nrow_table <- nrow(table_info)
ncol_table <- ncol(table_info)
column_ems <- c("2em", rep("1.125em", ncol_table - 1))
fsize <- 10
ktable <- table_info %>%
mutate_all(linebreak) %>%
kable(escape = FALSE, align = paste0(rep('l', ncol_table), collapse=""),
col.names = NULL,
booktabs = TRUE, format = "latex" , linesep = "") %>%
row_spec(1:nrow_table, color = "darkgray") %>%
column_spec(1, column_ems[1]) %>%
column_spec(2, column_ems[2]) %>%
column_spec(3, column_ems[3]) %>%
column_spec(4, column_ems[4]) %>%
column_spec(5, column_ems[5]) %>%
column_spec(6, column_ems[6]) %>%
column_spec(7, column_ems[7]) %>%
column_spec(8, column_ems[8]) %>%
column_spec(9, column_ems[9]) %>%
kable_styling(font_size = fsize) %>%
row_spec(1, align = 'c') %>%
row_spec(2, font_size = fsize - 2)
ktable <- ktable %>% row_spec(1:(nrow_table-1), hline_after = TRUE)
ktable <- ktable %>% add_header_above(c(" " = 1, "Manganese" = 2,
"Phosphorus" = 2,
"Potassium" = 2,
"Zinc" = 2), bold = T)
}
ktable
此代码的 table 输出如下所示:
预期输出应该与 table 相同,但在 header.
下面的第一行中没有所有额外的 1
我不知道这是 kableExtra
错误还是您误用了它,但问题出在对 kable()
的初始调用中。你有
kable(escape = FALSE, align = paste0(rep('l', ncol_table), collapse=""),
后来,LaTeX 中的对齐设置重复了很多次。如果将该行更改为
kable(escape = FALSE, align = 'l',
然后问题就解决了:
如标题所示,我写了一个 Rmarkdown 文件来打印 table,出于我无法理解的原因,它占用了 table 的第一行并重复它直到结束已到达页面:
似乎 table 以某种方式设置为固定宽度,但我不确定为什么会这样,我也不确定为什么只有一行重复。我希望它看起来很正常。未被 table 覆盖的页面的其余部分可以只是空白。感谢您的帮助。
我试过在 kable_styling
中修改 full_width
参数,这并没有什么不同。
这是一个可重现的例子。这是 header:
---
title: ""
always_allow_html: yes
output:
pdf_document:
latex_engine: xelatex
geometry: margin=0.3in
header-includes:
- \usepackage[T1]{fontenc}
- \usepackage{array}
- \usepackage{booktabs}
- \usepackage{xcolor}
- \usepackage{makecell}
- \usepackage{longtable}
- \usepackage{multirow}
- \usepackage{wrapfig}
- \usepackage{float}
- \usepackage{colortbl}
- \usepackage{pdflscape}
- \usepackage{tabu}
- \usepackage{threeparttable}
- \usepackage{threeparttablex}
- \usepackage[normalem]{ulem}
- \usepackage{makecell}
- \setmainfont{Helvetica}
- \pagenumbering{gobble}
- \DeclareTextCommand{\nobreakspace}{TU}{\leavevmode\nobreak\ }
documentclass: article
classoption: a4paper
---
这是重现问题的 R 块,注意我使用了设置 {r, echo=FALSE, message = FALSE, warning = FALSE}
。
# Packages
suppressMessages(library(extrafont))
suppressMessages(library(dplyr))
suppressMessages(library(pander))
suppressMessages(library(kableExtra))
# Data
table_info <- data.frame(a=1:4, b=1:4, c=1:4, d=1:4, e=1:4, f=1:4, g=1:4, h=1:4, i=1:4)
nrow_table <- nrow(table_info)
ncol_table <- ncol(table_info)
column_ems <- c("2em", rep("1.125em", ncol_table - 1))
fsize <- 10
ktable <- table_info %>%
mutate_all(linebreak) %>%
kable(escape = FALSE, align = paste0(rep('l', ncol_table), collapse=""),
col.names = NULL,
booktabs = TRUE, format = "latex" , linesep = "") %>%
row_spec(1:nrow_table, color = "darkgray") %>%
column_spec(1, column_ems[1]) %>%
column_spec(2, column_ems[2]) %>%
column_spec(3, column_ems[3]) %>%
column_spec(4, column_ems[4]) %>%
column_spec(5, column_ems[5]) %>%
column_spec(6, column_ems[6]) %>%
column_spec(7, column_ems[7]) %>%
column_spec(8, column_ems[8]) %>%
column_spec(9, column_ems[9]) %>%
kable_styling(font_size = fsize) %>%
row_spec(1, align = 'c') %>%
row_spec(2, font_size = fsize - 2)
ktable <- ktable %>% row_spec(1:(nrow_table-1), hline_after = TRUE)
ktable <- ktable %>% add_header_above(c(" " = 1, "Manganese" = 2,
"Phosphorus" = 2,
"Potassium" = 2,
"Zinc" = 2), bold = T)
}
ktable
此代码的 table 输出如下所示:
预期输出应该与 table 相同,但在 header.
下面的第一行中没有所有额外的 1我不知道这是 kableExtra
错误还是您误用了它,但问题出在对 kable()
的初始调用中。你有
kable(escape = FALSE, align = paste0(rep('l', ncol_table), collapse=""),
后来,LaTeX 中的对齐设置重复了很多次。如果将该行更改为
kable(escape = FALSE, align = 'l',
然后问题就解决了: