kableExtra中longtable与full_width兼容问题及PDF跨页表格编译报错
如何将包含连续长文本的单列表格渲染为可跨页的PDF文件?
默认设置longtable = F时,表格会被截断;指定longtable = T时,代码无法编译,编译日志报错如下:
Dimension too large.
\LT@max@sel #1#2->{\ifdim #2=\wd \tw@
#1\else \number \c@LT@chunks \fi }{\th...
l.167 \end{longtabu}
以下是可编译但会截断表格的Rmd代码示例,移除longtable前的注释符号后会触发报错:
--- output: pdf_document ---
suppressPackageStartupMessages(library(tidyverse)) suppressPackageStartupMessages(library(kableExtra)) tibble(Title = paste(paste(lorem:::ipsum(paragraphs = 20), collapse = " NEXT "), " *** END ***")) %>% kbl(booktabs = T, # longtable = T # 移除注释会触发报错 ) %>% kable_styling(full_width = TRUE, latex_options = c("hold_position", "repeat_header"), repeat_header_continued = "\\textit{(Continued on Next Page...)}" )
解决方法
问题根源是单列表格中的超长无换行文本导致LaTeX无法处理维度,可通过以下步骤修复:
- 启用
longtable = T - 添加
column_spec()为表格列设置固定宽度,强制长文本自动换行 - 移除
hold_position选项(该选项与longtable兼容性不佳)
修改后的代码如下:
suppressPackageStartupMessages(library(tidyverse)) suppressPackageStartupMessages(library(kableExtra)) tibble(Title = paste(paste(lorem:::ipsum(paragraphs = 20), collapse = " NEXT "), " *** END ***")) %>% kbl(booktabs = TRUE, longtable = TRUE) %>% column_spec(1, width = "\\textwidth") %>% # 设置列宽为页面宽度 kable_styling(full_width = TRUE, latex_options = c("repeat_header"), # 移除hold_position repeat_header_continued = "\\textit{(Continued on Next Page...)}" )
该修改让长文本在列宽限制内自动换行,同时longtable可以正常跨页渲染表格。
内容的提问来源于stack exchange,提问作者Roberto Scotti
相关产品推荐
相关产品推荐

