要控制行高度,需要指定
hrule(ft, i = 1:3, rule = 'atleast')
以及通过
height_all
ft <- flextable(df)
ft <- compose(
x = ft, j = "formula",
value = as_paragraph(as_equation(formula, width = 3, height = 2))
)
ft <- width(ft, j = 1:2, width = 2)
ft <- hrule(ft, i = 1:3, rule = 'atleast')
ft <- height_all(ft, height = 1)
ft <- fontsize(ft, size = 20, part = "all")
不幸的是,这并没有改变方程的大小:
组成第二列的mathjax公式(包括文本字符)被呈现为SVG路径,它们的大小和字体家族都是固定的。
如果你深入研究flextable代码,当你这样做的时候,你会发现
-
print(ft)
它调用
-
flextable:::print.flextable
哪个调用
-
htmltools_value(ft)
,它调用
-
flextable:::html_str(ft)
,它调用
-
flextable:::html_gen(ft)
,生成实际的html。
公式字符串直接在内部传递
html_gen
到
equatags::transform_mathjax
,它不接受任何大小或字体家族参数,只输出默认的mathjax-svg。svg图像以固定大小合并到表格单元格中。
为了改变svg的大小,你需要参与svg黑客攻击,在简单缩放的情况下,这并不太困难:
html_format <- as.character(htmltools_value(ft))
html_format <- gsub('<svg ',
'<svg transform=\"scale(2)\" ',
html_format, fixed = TRUE)
这个
html_format
对象只是flextable的html字符串,可以进行渲染
像这样:
dir <- tempfile()
dir.create(dir)
htmlFile <- file.path(dir, "index.html")
writeLines(html_format, con = htmlFile)
rstudioapi::viewer(htmlFile)
导致
当然,这些都不是理想的,但这只是flextable通过等式渲染公式的一个限制。
不幸的是,Mathjax
does not allow for arbitrary fonts to be used
,所以这将更加难以实现。