当从Shiny App调用时,如何在Rmarkdown中呈现表和数学

时间:2017-04-01 15:03:01

标签: javascript html r shiny markdown

我有一个Rmarkdown文件(info.rmd),如下所示:

---
title: "Information"
theme: yeti
date: "4/1/2017"
output: html_document
---


## R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.


```{r echo = FALSE, results = 'asis'}
library(knitr)
kable(mtcars[1:5, ], caption = "A knitr kable.")
```

## Formulation

Here is where we formulate
$$\sum_{i=1}^n X_i$$

像这样调用Rmarkdown的ShinyApp:

server.R

包含此

  output$markdown <- renderUI({
    HTML(markdown::markdownToHTML(knit('info.rmd', quiet = TRUE), fragment.only=TRUE))
  })

ui.R

包含:

 fluidPage(uiOutput('markdown'))

但是生成的表和数学怎么会这样呢?

enter image description here

这样做的正确方法是什么?

当在Shiny之外独立运行时,info.rmd会正确生成表格:

enter image description here

我在ui.R

中尝试过此操作
 includeHTML("info.html")

正确显示文件html,但阻止绘图 和其他tabPanel()的反应性有效。

更新

以下是@Nice解决方案之后的新结果:

enter image description here

2 个答案:

答案 0 :(得分:5)

如果使用fragment.only,则不包括CSS和JS,并且没有设置表/方程式。

执行此操作的一种简单方法是在iframe中包含带标题的完整HTML,这样它就不会干扰您应用的其余部分。

output$markdown <- renderUI({
    tags$iframe(src='info.html',width="100%",frameBorder="0",height="1000px")
  })

info.html文件必须位于应用的www文件夹中。您可以通过更改tags$iframe

中的参数来调整iframe的宽度和高度

您可以使用CSS更改iframe中主容器的宽度。如果将其添加到info.rmd文件中:

```{r results="asis",echo = FALSE}
cat("
<style>
.main-container.container-fluid {
   max-width: 100%;
   padding-left:0px;
}
</style>
")
```

答案 1 :(得分:0)

使用以下内容编辑闪亮的服务器部分应该有所帮助:

output$markdown <- renderUI({
    markdown::markdownToHTML(knit('info.rmd', quiet = TRUE), fragment.only=TRUE)
    withMathJax(includeHTML("info.html"))
  })

或者您也可以执行以下操作:

output$markdown <- renderUI({
    markdown::markdownToHTML(knit('info.rmd', quiet = TRUE), fragment.only=TRUE)
    withMathJax(includeMarkdown("info.md"))
  })