You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:36:02