在 Shiny 中使用 MathJax 渲染 Latex

Rendering Latex using MathJax in Shiny

我正在尝试创建一个动态的 Shiny 应用程序,它使用 yacas 计算机代数系统来处理输入的函数。作为第一步,我希望 UI 确认输入的内容。 但是,以下 Shiny 代码未以 Latex 格式显示输入的函数。

library(shiny)
library(Ryacas) # for the TeXForm command
library(Ryacas0)
library(mathjaxr) # for rendering Latex expressions in Shiny

ui <- fluidPage(
  
  sidebarPanel(
    textInput(
      inputId = "ui_function",
      label = 'f(x) = ',
      value = "x^2",
      placeholder = "Enter function here"),
  ),
  
  mainPanel(
    uiOutput("entered")
  )
) 

server <- function(input, output) {
  
  output$entered = renderUI({
    withMathJax(
      helpText(yac_str(paste0("TeXForm(",
                              input$ui_function,
                              ")")
                       )
               )
      )
  })
  
} # end server function

shinyApp(ui = ui, server = server)

当我从上面的代码中删除 'withMathJax' 命令时,它的行为方式完全相同,所以就好像 'withMathJax' 命令对输出没有任何影响。

举个简单的例子,我正在寻找用户输入 'x^2' 它应该显示

我欢迎任何人提供的任何帮助。

我 运行 使用最新的 RStudio 2022.02.1 Build 461,使用 R4.1.3、Shiny 1.7.1 和 MathJax 1.6-0

您可以进行如下操作:

library(shiny)
library(Ryacas) # for the TeXForm command

ui <- fluidPage(
  
  sidebarPanel(
    textInput(
      inputId = "ui_function",
      label = 'f(x) = ',
      value = "x^2",
      placeholder = "Enter function here"),
  ),
  
  mainPanel(
    helpblock(withMathJax(uiOutput("entered", inline = TRUE)))
  )
) 

server <- function(input, output) {
  
  output$entered = renderUI({
    paste0(
      "\(", 
      yac_str(paste0("TeXForm(", input$ui_function, ")")), 
      "\)"
    )
  })
  
} # end server function

shinyApp(ui = ui, server = server)

mathjaxr 包不适用于 Shiny,它用于帮助文件 (Rd)。

根据 Stephane 的建议,我 re-looked 在我的代码中,这个版本现在可以按预期工作了:

library(shiny)
library(Ryacas)
library(Ryacas0)
library(mathjaxr) # for rendering Latex expressions in Shiny

ui <- fluidPage(
  
  sidebarPanel(
    textInput(
      inputId = "ui_function",
      label = 'f(x) = ',
      value = "x^2",
      placeholder = "Enter function here"),
  ),
  
  mainPanel(
    withMathJax(uiOutput("entered"))
  )
) 

server <- function(input, output) {
  
  output$entered = renderUI({
     withMathJax(
      helpText(
        paste0(
        "\(",
        yac_str(paste0("TeXForm(", input$ui_function, ")")),
        "\)"
        )
      )
     )
  })
  
} # end server function

shinyApp(ui = ui, server = server)

在 ui 的 mainPanel 中包含 withMathJax 似乎有所不同。似乎连接到服务器内部字符串的 "\(" 字符串对其成功至关重要。