2015-07-21 46 views
1

我正在研究一款旨在幫助學生的閃亮應用。它使用學生特定的輸入值爲每個學生生成一些方程式的解決方案。如何在反應式MathJax元素中加入html代碼?

的問題是,MathJax方程呈現爲普通文本,看到最小的例子,這個形象:

enter image description here

任何想法MathJax如何動態元素能正確呈現?

我目前的做法:

  • 使用文件(solu_template.Rmd)與輸入參數(params$student)創建學生特定的降價文件;
  • 呈現降價文件並將其包含在ui中。

this example所示,反應式動態更改MathJax元素是可行的。但是,我想使用更復雜的文件,並將解決方案模板的準備工作保留爲文件。

其他嘗試:

  • 直接使用由render()生成的HTML文件,但我不知道如何將它包含在ui作爲一個動態變化的組件;
  • 讀取生成的html文件readLines()並使用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

這裏是與renderMarkdown()方法的溶液:

下面的行應添加到HTML代碼由renderMarkdown()產生,這個w AY瀏覽器會知道,輸出應該呈現考慮MathJax元素:

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

關於上述示例中,這應該被添加到應用的server函數的末尾。[R

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

如果你可以使用knitr我不明白爲什麼這是行不通的。我沒有使用'動態數學',但是我在用於學生的閃亮應用內渲染的Rmd文件中使用了相當數量的符號。看看下面的鏈接,讓我知道你是否有任何問題。

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

+0

感謝您的鏈接,很好的例子,你做了一些非常有趣的事情 - 這是我從來沒有想到的 - 相結合RMD而有光澤。關於OP,實際上'render()'在內部使用'knitr'函數,並且只有在添加了我的答案中給出的行後渲染才起作用。我看到你也對'inclRmd()'中的'knitr'輸出做了一些修改,並且你還提出了一個評論,即不包含圖像渲染(嵌入)。你有沒有解決這個問題呢?我也面臨類似的問題。 (我會仔細看看你'inclRmd()') – Arpi

+0

我不想實際使用嵌入式圖像。除非你需要發送一個文件給學生或其他東西,否則我會避免它。無論如何,Shiny會將圖像放在某個地方。 – Vincent

相關問題