我正在开发一款旨在帮助学生的闪亮应用。它使用学生特定的输入值为每个学生生成一些方程式。
问题是MathJax方程式呈现为常规文本,请参见最小示例和此图像:
知道如何正确呈现动态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)`$
答案 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