如何在Shiny中包含带有反应性MathJax元素的html代码?

时间:2015-07-21 08:53:26

标签: r shiny knitr r-markdown mathjax

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

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

enter image description here

知道如何正确呈现动态MathJax元素吗?

我目前的做法:

  • 使用带有输入参数(rmarkdown)的solu_template.Rmd文档(params$student)来创建学生特定的降价文件;
  • 呈现降价文件并将其包含在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)`$

2 个答案:

答案 0 :(得分:3)

以下是使用renderMarkdown()方法的解决方案:

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

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

关于上面的示例,应将其添加到 app.R server函数的末尾:

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

答案 1 :(得分:1)

如果你可以使用knitr我不明白为什么这不会起作用。我没有使用动态数学&#39;但是我在用于学生的闪亮应用程序内部渲染的Rmd文件中使用了相当多的表示法。看看下面链接的回购,如果您有任何问题,请告诉我。

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