如何使用renderUI并手动加载MathJax

ztyzrc3y  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(129)

我正在使用MathJax构建一个shiny应用程序。但是,我需要手动加载javascript,因为我需要\cancel扩展。这可以正常工作,但有一个例外。我无法让应用程序使用renderUI shiny函数渲染MathJax。下面的代码不会显示数学,但可以正常使用通常的withMathJax()过程。

library(shiny)

js <- "
window.MathJax = {
  loader: {load: ['[tex]/cancel']},
  tex: {packages: {'[+]': ['cancel']}}
};
"

out_text <- "Equation 1: $$1+1=2$$"

ui <- fluidPage(
  tags$head(
    tags$script(async="", src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"),
    tags$script(HTML(js))
  ),
  uiOutput("main")
)

server <- function(input, output, session) {
  output$main <- renderUI({
    out_text
  })
}

shinyApp(ui, server)
2vuwiymt

2vuwiymt1#

使用MathJax 3,必须调用MathJax.typeset()来刷新MathJax进程。您可以在renderUI中的tags$script中添加此调用:

library(shiny)

js <- "
window.MathJax = {
  loader: {load: ['[tex]/cancel']},
  tex: {packages: {'[+]': ['cancel']}}
};
"

ui <- fluidPage(
  tags$head(
    tags$script(async="", src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"),
    tags$script(HTML(js))
  ),
  div("$$1+2=3$$"), 
  div("$$\\cancel{10a}$$"),
  uiOutput("equation")
)

server <- function(input, output, session) {
  output[["equation"]] <- renderUI({
    tagList(
      div("$$\\cancel{10b}$$"),
      tags$script(HTML('MathJax.typeset();'))
    )
  })
}

shinyApp(ui, server)

相关问题