在Shiny中使用kable/kableExtra导出PDF表格时如何修改字体
问题原因
你之前的两个方案无效的核心原因:
html_font参数仅作用于HTML格式的kable输出,你指定了输出格式为latex,该参数完全不生效。latex_header_includes是kable_styling的参数,你错误地尝试传入save_kable,同时代码里多了不必要的反引号包裹,转义符也存在错误,导致运行报错。
修复方案
场景1:使用LaTeX自带的Helvetica字体(等效Arial)
修正参数位置和写法即可直接运行:
library(kableExtra) df <- data.frame(animal = c("cat", "dog", "horse", "lemur"), lifespan = c(15, 12, 25, 37)) x <- kable(df, "latex", booktabs = T, linesep = c("", "", "", "\\hline"), col.names = NULL) %>% add_header_above(c("Animal Lifespans" =2), line = F) %>% kable_styling( font_size = 5, full_width = TRUE, latex_header_includes = c( "\\usepackage{helvet}", "\\renewcommand{\\familydefault}{\\sfdefault}" ) ) save_kable(x, "~/Downloads/test.pdf")
场景2:使用自定义字体(如Arial Narrow)
如果需要加载系统安装的任意自定义字体,改用xelatex编译即可:
library(kableExtra) df <- data.frame(animal = c("cat", "dog", "horse", "lemur"), lifespan = c(15, 12, 25, 37)) x <- kable(df, "latex", booktabs = T, linesep = c("", "", "", "\\hline"), col.names = NULL) %>% add_header_above(c("Animal Lifespans" =2), line = F) %>% kable_styling( font_size = 5, full_width = TRUE, latex_header_includes = c( "\\usepackage{fontspec}", "\\setmainfont{Arial Narrow}" ) ) # 保存时指定xelatex编译引擎,支持自定义字体加载 save_kable(x, "~/Downloads/test.pdf", latex_engine = "xelatex")
注意事项
- 字体名称需要和系统中安装的字体全称完全一致,Windows用户可在控制面板的字体页面查看对应名称。
- 如果部署在Shiny服务器上,需要确保服务器端也安装了对应字体,且配置了对应的LaTeX编译环境。
- 原代码中的
html_font参数对LaTeX输出无作用,可以直接删除。
内容的提问来源于stack exchange,提问作者skhaji
相关产品推荐
相关产品推荐

