Flextable :在数据框中使用上标

Flo*_*lli 3 html markdown flextable r-markdown

这个问题被问了几次,但令人惊讶的是,没有给出答案。

我希望数据框中的一些数字出现在上标中。函数composedisplay不适合这里,因为我还不知道数据框中的哪些值将出现在上标中(我的表格是自动生成的)。

我尝试使用^8^like for kable$$10^-3$$paste(expression(10^2))"H\\textsubscript{123}"等。

没有任何效果!帮助 !我拔掉我的头发...

library(flextable)
bab = data.frame(c( "10\\textsubscript{-3}", 
paste(as.expression(10^-3)), '10%-3%', '10^-2^' ))
flextable(bab)
Run Code Online (Sandbox Code Playgroud)

我正在编织Rhtml 。

use*_*330 6

在 HTML 中,您可以使用诸如 之类的东西来表示上标<sup>-3</sup>,并使用 来表示下标<sub>-3</sub>。但是,如果将它们放入表格的单元格中,您将看到显示的全文,它不会被解释为 HTML,因为flextable转义了尖括号。

kable()函数有一个参数escape = FALSE可以关闭此功能,但flextable不能:请参阅https://github.com/davidgohel/flextable/issues/156。然而,有一种黑客方法可以绕过这个限制:用htmlEscape()一个不执行任何操作的函数替换该函数。

例如,

```{r}
library(flextable)
env <- parent.env(loadNamespace("flextable")) # The imports
unlockBinding("htmlEscape", env)
assign("htmlEscape", function(text, attribute = FALSE) text, envir=env)
lockBinding("htmlEscape", env)
bab = data.frame(x = "10<sup>-3</sup>")
flextable(bab)
``` 
Run Code Online (Sandbox Code Playgroud)

这会将表显示为

截屏

这样做时要小心:在实际表中可能存在您确实需要 HTML 转义的情况,并且此代码将在文档的其余部分禁用该转义。如果您在 R 会话中执行此代码,它将禁用会话其余部分的转义。

如果您正在考虑在提交给 CRAN 的包中使用这样的文档,那就算了。您不应该在您希望其他人使用的代码中弄乱这样的绑定。

编辑添加:

事实上,有一种方法可以做到这一点,而无需上面给出的技巧。本文对此进行了描述: https://davidgohel.github.io/flextable/articles/display.html#sugar-functions-for-complex-formattingas_paragraph这个想法是用对、as_supas_sub等的调用替换需要上标或下标的条目:

```{r}
library(flextable)
bab <- data.frame(x = "dummy")
bab <- flextable(bab)
bab <- compose(bab, part = "body", i = 1, j = 1,
         value = as_paragraph("10",
                              as_sup("-3")))
bab
```
Run Code Online (Sandbox Code Playgroud)

这绝对比我给出的方法更安全。