如何在设置escape=FALSE的kableExtra函数中强制实现文本换行
kableExtra设置escape=FALSE时的换行实现方案
问题说明
kableExtra 0.8.0及以上版本中,add_header_above、pack_rows等函数处理普通表格文本时,直接插入\n即可实现换行。但如果文本中包含LaTeX语法(比如数学公式、自定义格式命令),必须设置escape=FALSE避免LaTeX代码被转义,此时直接写\n不会被解析为换行,无法达到预期效果。
问题复现代码如下:
library(dplyr) library(knitr) library(kableExtra) starwars %>% filter(species == 'Gungan' | species == 'Droid') %>% arrange(species) %>% select(name, eye_color) %>% kbl(booktabs = TRUE) %>% pack_rows( index = c( 'The droids: everybody\'s favourite' = 6, 'The Gungans: only beloved of \nthose aged under $3^2$' = 3), escape = FALSE)
解决方案
设置escape=FALSE后,传入的文本会直接传递给LaTeX编译器渲染,普通的\n是文本层面的换行符,LaTeX无法识别。此时只需要将文本中的\n替换为LaTeX原生换行命令\newline即可实现强制换行。
修正后的可运行代码
library(dplyr) library(knitr) library(kableExtra) starwars %>% filter(species == 'Gungan' | species == 'Droid') %>% arrange(species) %>% select(name, eye_color) %>% kbl(booktabs = TRUE) %>% pack_rows( index = c( 'The droids: everybody\'s favourite' = 6, # R字符串中反斜杠需要转义,所以写为\\newline 'The Gungans: only beloved of \\newline those aged under $3^2$' = 3), escape = FALSE)
注意事项:R语言字符串里反斜杠是转义符,写LaTeX命令时需要用双反斜杠
\\开头,否则会触发R的转义解析报错。如果需要调整换行后的行间距,可以给\newline传入可选参数指定间距,比如\\newline[0.3em]表示换行后额外增加0.3em的垂直间距。
内容的提问来源于stack exchange,提问作者Westcroft_to_Apse
相关产品推荐
相关产品推荐

