【问题标题】:Math symbols not rendered correctly in R notebook format from KableExtra table objects从 KableExtra 表对象以 R 笔记本格式正确呈现数学符号
【发布时间】:2020-09-19 11:29:54
【问题描述】:

更新:KableExtra 创建者 haozhu233 为包添加了 mathjax 支持。在 Github 上查看我的原始问题和他的 cmets:https://github.com/haozhu233/kableExtra/issues/473#issuecomment-668224096

当我尝试使用 kable 和 kableExtra 创建表格时,我无法正确显示数学符号。我能够像预期的那样在普通 kable 表中生成数学字符。我已经尝试了选项 escape = FALSE 和protect_latex = T 的不同变体,但没有任何运气。如果我编织成 PDF 或 HTML,数学符号会正确显示,它只是显示原始字符的内联显示(和预览)和笔记本显示。

据我从 HTML 输出中可以看出,kable 表和 kableExtra 表之间的唯一区别是后者包含一些关于类和样式的额外信息。 R 对象也属于不同的类,这让我想知道问题是否可能是没有调用 mathjax 来渲染 kableExtra 对象?如果是这样,有没有办法告诉 Rstudio 在从 kableExtra 对象呈现 HTML 时调用 mathjax?

我已经在两台不同的计算机上使用 RStudio Cloud 重现了这个问题。

注意:我提交了Github Issue,但意识到在这里提问可能更合适。我还在Rstudio community 上发帖但没有得到回复,所以我想我会在这里碰碰运气。

代表:

---
title: "Kable Extra Math Symbols"
output: html_notebook
---

```{r}

math_symb <- c(1,2,3,4)

kable_table <- knitr::kable(math_symb, col.names = "$R^{2}$") 
styled_kable_table <- kableExtra::kable_styling(kable_table)

kable_table
styled_kable_table
```{}

从示例中,对象kable_table 以列名"R2" 呈现,这是我想要实现的,而styled_kable_table 对象以不想要的列名"$R^2$" 显示

会话信息:

R 版本 3.6.3 (2020-02-29) 平台:x86_64-w64-mingw32/x64(64位) 运行于:Windows 10 x64(内部版本 18363)

矩阵产品:默认

语言环境: 2 LC_COLLATE=挪威 Bokmål_Norway.1252 LC_CTYPE=挪威 Bokmål_Norway.1252 [3] LC_MONETARY=挪威 Bokmål_Norway.1252 LC_NUMERIC=C [5] LC_TIME=挪威语 Bokmål_Norway.1252

附加的基础包: 2 stats graphics grDevices utils datasets methods base

通过命名空间加载(未附加): 2 Rcpp_1.0.4.6 rstudioapi_0.11 xml2_1.3.2 knitr_1.28 magrittr_1.5 hms_0.5.3 [7] munsell_0.5.0 rvest_0.3.5 viridisLite_0.3.0 colorspace_1.4-1 R6_2.4.1 rlang_0.4.6 [13] stringr_1.4.0 httr_1.4.1 highr_0.8 tools_3.6.3 webshot_0.5.2 xfun_0.14 [19] htmltools_0.4.0 ellipsis_0.3.0 yaml_2.2.1 digest_0.6.25 tibble_3.0.1 生命周期_0.2.0 [25] 蜡笔_1.3.4 kableExtra_1.1.0 读卡器_1.3.1 vctrs_0.3.0 胶水_1.4.1 评估_0.14 [31] rmarkdown_2.1 stringi_1.4.6 compiler_3.6.3 pillar_1.4.4 scales_1.1.1 pkgconfig_2.0.3

【问题讨论】:

  • 欢迎来到 SO!为了帮助我们帮助您,最好提供一个简单的、独立的示例来演示您的问题,并可用于测试我们的解决方案。 This post 可能会有所帮助。您提供了很多上下文(做得好!),但未能提供任何示例说明哪些符号未按您希望的方式打印。
  • 您好,感谢您的热情欢迎和建议。我已经编辑了我的帖子,以指示未按预期打印的符号。

标签: r r-markdown knitr mathjax kableextra


【解决方案1】:

您正在生成一个 HTML 文档,因此您需要使用 HTML 格式化您的标题:

math_symb <- c(1,2,3,4)
math_symb %>%  kable(col.names = "R<sup>2</sup>")

给予

【讨论】:

  • 感谢您的建议。但是与 knitr 和 pandoc 一起使用的 mathjax 应该处理任何 HTML 代码,这样我就不必使用 HTML 编写字符串。在我的示例中,kable 表渲染得很好,不需要任何 HTML。当我使用 KableExtra 包进一步处理表格时,数学无法正确呈现。
  • 啊!我知道了。我很抱歉。奇怪的是,即使使用 kable_styling(),您的标题 "$R^{2}$" 也会正确呈现给我。此刻,我被难住了……
  • 即使在 Rstudio 的查看器窗格中,如果您将文档预览为 HTML 笔记本,它是否也能正确显示?因为如果我只是编织成 html 或 PDF,我会得到所需的输出。
  • 不,它不能在预览窗格中正确显示,也不能在 HTML 笔记本中正确显示。但它确实在 HTML 文档中正确显示。
  • 好的,谢谢你告诉我!希望有人可以插话并解释为什么预览窗格(或笔记本格式)不想处理 kableextra 对象...
【解决方案2】:

这行得通:

```{r, results ='asis'}

math_symb <- c(1,2,3,4)

kable_table <- knitr::kable(math_symb, col.names = "$R^{2}$") 
styled_kable_table <- kableExtra::kable_styling(kable_table)

kable_table
cat(styled_kable_table)
```

但是,我必须调查它为什么有效。

【讨论】:

  • 我记得我在 Shiny 应用程序中遇到的类似问题。我的数学符号没有在动态 UI 中呈现。原来,问题在于 wuthMathJax 只渲染了页面的初始版本,而不是动态重新渲染。解决方案是将重新渲染也包含在withMathJax 中。我最初尝试对您的问题做同样的尝试失败了。但至少@JAQuent 给了你一个解决方法。
  • 这也适用于我。对我来说,这进一步表明 mathjax 可能无法在 KableExtra 对象上正确调用,因为 cat() 函数的原始 html 输出显示正确。
  • 我同意这个评估。也许值得重新打开那个问题。
  • 我有点不同意。如果将输出更改为 html_documentkable_styling() 将正确呈现。但是html_document 不是动态的。我认为导致问题的是html_notebook 的动态特性,而不是kable_stylingThis page 提出了一个适当的解决方案,但它比 @JAQuent 的解决方法要多得多!
  • 我认为这听起来也很合理,但这让我想知道为什么 HTML 笔记本的动态特性对于“正常”kable 对象来说不是问题?在我看来,这似乎是 kntir、pandoc 和 mathjax 如何协同工作以从 kableExtra 对象动态呈现 html 的问题。话虽如此,我不确定我应该向哪个包维护者提出这个问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 2023-03-31
  • 2021-10-01
  • 1970-01-01
  • 2011-11-10
  • 2022-11-14
相关资源
最近更新 更多