【问题标题】:How to include html code with reactive MathJax elements in Shiny?如何在 Shiny 中包含带有反应性 MathJax 元素的 html 代码?
【发布时间】:2015-10-10 15:14:48
【问题描述】:

我正在开发一款旨在帮助学生的闪亮应用。它使用学生特定的输入值通过一些方程为每个学生生成解决方案。

问题在于 MathJax 方程被呈现为常规文本,请参见最小示例和此图像:

知道如何正确渲染动态 MathJax 元素吗?

我目前的做法:

  • 使用带有输入参数 (params$student) 的 rmarkdown 文档 (solu_template.Rmd) 创建学生特定的降价文件;
  • 渲染markdown文件并将其包含在ui中。

this example 所示,响应式、动态变化的 MathJax 元素是可行的。但是,我想使用更复杂的文件,并保持将解决方案模板准备为rmarkdown 文件的便利性。

其他尝试:

  • 直接使用render()生成的html文件,但是不知道怎么把它作为动态变化的组件包含在ui中;
  • readLines()读取生成的html文件,用htmlOutput显示;没有成功,只是一堆代码。

那么,使用这种方法的问题是如何渲染/显示动态变化的 html 文件?

欢迎所有想法,建议!

app.R

library(shiny)
library(markdown)

shinyApp( 

  ui = fluidPage(
    selectInput("student", "Student:", 
      choices = c("Student1", "Student2", "Student3")),
    actionButton("show_solu", "Run!"),

    hr(),
    withMathJax(),
    htmlOutput("solu")
  ),

  server = function(input, output, session) {
    output$solu <- eventReactive(input$show_solu, {
      rmarkdown::render("solu_template.Rmd",
        quiet = F, clean = F,
        params = list(student = input$student))

      solu <- renderMarkdown("solu_template.knit.md")
    }
    )
  }
)

solu_template.Rmd

---
title: "Solution"
params:
  student: Student1
output:
  html_document:
    theme: readable
---

```{r, echo = FALSE}
S = list(Student1 = 1, Student2 = 2, Student3 = 3)
s = S[[params$student]]
```
## Heading

Student dependent initial value:
$s = `r s`$

Some nice reasoning which yields to this equation:

$R = s^2 + \sqrt{2} = `r signif(s^2 + sqrt(2), 3)`$

【问题讨论】:

    标签: r shiny knitr r-markdown mathjax


    【解决方案1】:

    这是renderMarkdown() 方法的解决方案:

    以下行应该添加到renderMarkdown()生成的html代码中,这样浏览器就会知道应该考虑MathJax元素来呈现输出:

    "<script>MathJax.Hub.Queue(["Typeset", MathJax.Hub]);</script>"
    

    关于上面的例子,这个应该加到app.Rserver函数的末尾:

    solu = paste(solu, "<script>MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]);</script>") 
    

    【讨论】:

      【解决方案2】:

      如果您可以使用 knitr,我不明白为什么这不起作用。我没有使用“动态数学”,但我在用于学生的闪亮应用程序中呈现的 Rmd 文件中使用了大量符号。看看下面链接的 repos,如果您有任何问题,请告诉我。

      https://github.com/vnijs/shiny-site https://github.com/vnijs/quizr

      【讨论】:

      • 感谢链接,很好的例子,你做了一些非常有趣的事情——我从来没有想过——结合 Rmd 和 Shiny。关于 OP,实际上 render() 内部使用了 knitr 函数,并且渲染仍然无法正常工作,只有在添加了我的答案中给出的行之后。我看到您还对inclRmd() 中的knitr 输出进行了一些修改,并且您还评论说不包括图像渲染(嵌入)。你解决了这个问题吗?我也面临着类似的问题。 (我会仔细看看你inclRmd()
      • 我实际上并不想使用嵌入图像。除非您需要将单个文件发送给学生或其他东西,否则我会避免使用它。无论如何,Shiny 会将图像放在某个地方。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 2019-04-16
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多