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

如何设置flextable中公式的字体族与字号

这个问题我之前也碰到过!其实是因为as_equation()生成的内容和普通文本不是同一类对象——在DOCX里它是Word的原生公式元素,在HTML里则依赖MathJax渲染,flextable的通用font()和fontsize()函数没法直接作用在这些特殊元素上,得针对性设置才行。

下面分两种输出场景给你解决方案:

1. 针对DOCX输出的处理

要调整DOCX里的公式字体和字号,我们可以借助officer包的fp_text()创建样式对象,然后通过as_equation()的props参数传入:

library(flextable)
library(officer) # 用来创建公式的样式属性

eqs <- c( "(ax^2 + bx + c = 0)", "a \\ne 0", "x = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}" )
text = LETTERS[1:3]
df <- data.frame(text = text, formula = eqs)

# 定义公式的样式:字号20,字体族设为Arial(可替换成你需要的字体)
eq_style <- fp_text(font.size = 20, font.family = "Arial")

ft <- flextable(df)
ft <- compose(
  x = ft, j = "formula",
  value = as_paragraph(
    as_equation(formula, width = 2, props = eq_style) # 把样式传给公式
  )
)
ft <- width(ft, j = 2, width = 2)
# 普通文本的样式还是用常规方法设置
ft <- fontsize(ft, size = 20, part = "all")
ft <- font(ft, fontname = "Arial", part = "all")

# 导出DOCX
fn <- tempfile(fileext = ".docx")
save_as_docx(ft, path = fn)
# fs::file_show(fn) # 取消注释打开文件查看效果

这样导出的DOCX里,公式和普通文本的字体、字号就能保持一致了。

2. 针对HTML输出的处理

HTML里的公式是MathJax渲染的,我们可以给公式元素添加行内CSS样式来调整字体和大小:

library(flextable)
library(htmltools)

eqs <- c( "(ax^2 + bx + c = 0)", "a \\ne 0", "x = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}" )
text = LETTERS[1:3]
df <- data.frame(text = text, formula = eqs)

ft <- flextable(df)
ft <- compose(
  x = ft, j = "formula",
  value = as_paragraph(
    as_equation(
      formula, 
      width = 2,
      # 添加行内CSS样式,设置字号和字体族
      attr = list(style = "font-size:20px; font-family:Arial;")
    )
  )
)
ft <- width(ft, j = 2, width = 2)
# 普通文本的样式照常设置
ft <- fontsize(ft, size = 20, part = "all")
ft <- font(ft, fontname = "Arial", part = "all")

# 导出HTML
ft_html <- tempfile(fileext = ".html")
save_as_html(ft, path = ft_html)
# fs::file_show(ft_html) # 取消注释打开文件查看效果

需要注意的是,MathJax对部分字体的支持有限,如果自定义字体不生效,可以试试MathJax默认支持的字体(比如STIX-Regular、Times New Roman等)。

内容的提问来源于stack exchange,提问作者stefan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:17:43